1.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js Mon May 27 08:33:59 2013 +0200
1.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js Thu Apr 24 18:05:21 2014 +0200
1.3 @@ -2,16 +2,16 @@
1.4 vm.java_lang_reflect_Array(false);
1.5 vm.java_lang_String(false);
1.6
1.7 -Array.prototype.at = function(indx, value) {
1.8 - if (indx < 0 || indx > this.length) {
1.9 +Array.at = function(arr, indx, value) {
1.10 + if (indx < 0 || indx >= arr.length) {
1.11 var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
1.12 e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
1.13 throw e;
1.14 }
1.15 - if (arguments.length === 2) {
1.16 - this[indx] = value;
1.17 + if (arguments.length === 3) {
1.18 + arr[indx] = value;
1.19 }
1.20 - return this[indx];
1.21 + return arr[indx];
1.22 };
1.23 Array.prototype.getClass__Ljava_lang_Class_2 = function() {
1.24 return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2(this.jvmName);
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon May 27 08:33:59 2013 +0200
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Apr 24 18:05:21 2014 +0200
2.3 @@ -1003,49 +1003,49 @@
2.4 smapper.popA(), smapper.pushI());
2.5 break;
2.6 case opc_lastore:
2.7 - emit(out, "@3.at(@2, @1);",
2.8 + emit(out, "Array.at(@3, @2, @1);",
2.9 smapper.popL(), smapper.popI(), smapper.popA());
2.10 break;
2.11 case opc_fastore:
2.12 - emit(out, "@3.at(@2, @1);",
2.13 + emit(out, "Array.at(@3, @2, @1);",
2.14 smapper.popF(), smapper.popI(), smapper.popA());
2.15 break;
2.16 case opc_dastore:
2.17 - emit(out, "@3.at(@2, @1);",
2.18 + emit(out, "Array.at(@3, @2, @1);",
2.19 smapper.popD(), smapper.popI(), smapper.popA());
2.20 break;
2.21 case opc_aastore:
2.22 - emit(out, "@3.at(@2, @1);",
2.23 + emit(out, "Array.at(@3, @2, @1);",
2.24 smapper.popA(), smapper.popI(), smapper.popA());
2.25 break;
2.26 case opc_iastore:
2.27 case opc_bastore:
2.28 case opc_castore:
2.29 case opc_sastore:
2.30 - emit(out, "@3.at(@2, @1);",
2.31 + emit(out, "Array.at(@3, @2, @1);",
2.32 smapper.popI(), smapper.popI(), smapper.popA());
2.33 break;
2.34 case opc_laload:
2.35 - emit(out, "var @3 = @2.at(@1);",
2.36 + emit(out, "var @3 = Array.at(@2, @1);",
2.37 smapper.popI(), smapper.popA(), smapper.pushL());
2.38 break;
2.39 case opc_faload:
2.40 - emit(out, "var @3 = @2.at(@1);",
2.41 + emit(out, "var @3 = Array.at(@2, @1);",
2.42 smapper.popI(), smapper.popA(), smapper.pushF());
2.43 break;
2.44 case opc_daload:
2.45 - emit(out, "var @3 = @2.at(@1);",
2.46 + emit(out, "var @3 = Array.at(@2, @1);",
2.47 smapper.popI(), smapper.popA(), smapper.pushD());
2.48 break;
2.49 case opc_aaload:
2.50 - emit(out, "var @3 = @2.at(@1);",
2.51 + emit(out, "var @3 = Array.at(@2, @1);",
2.52 smapper.popI(), smapper.popA(), smapper.pushA());
2.53 break;
2.54 case opc_iaload:
2.55 case opc_baload:
2.56 case opc_caload:
2.57 case opc_saload:
2.58 - emit(out, "var @3 = @2.at(@1);",
2.59 + emit(out, "var @3 = Array.at(@2, @1);",
2.60 smapper.popI(), smapper.popA(), smapper.pushI());
2.61 break;
2.62 case opc_pop:
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Mon May 27 08:33:59 2013 +0200
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Thu Apr 24 18:05:21 2014 +0200
3.3 @@ -94,12 +94,14 @@
3.4 {
3.5 // 2nd invocation
3.6 Object ret = code.invokeMethod(clazz, method, "java.lang.String");
3.7 - assertEquals(ret, Double.valueOf(2));
3.8 + assertTrue(ret instanceof Number, "Is number: " + ret);
3.9 + assertEquals(((Number)ret).doubleValue(), 2.0);
3.10 }
3.11 {
3.12 // 3rd invocation
3.13 Object ret = code.invokeMethod(clazz, method, "java.lang.Integer");
3.14 - assertEquals(ret, Double.valueOf(3));
3.15 + assertTrue(ret instanceof Number, "Is number: " + ret);
3.16 + assertEquals(((Number)ret).doubleValue(), 3.0);
3.17 }
3.18 }
3.19
4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java Mon May 27 08:33:59 2013 +0200
4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java Thu Apr 24 18:05:21 2014 +0200
4.3 @@ -65,7 +65,10 @@
4.4 // in case of Long it is necessary convert it to number
4.5 // since the Long is represented by two numbers in JavaScript
4.6 try {
4.7 - ret = code.invokeMethod(ret, "toFP");
4.8 + final Object toFP = ((ScriptEngine)code).eval("Number.prototype.toFP");
4.9 + if (ret instanceof Long) {
4.10 + ret = code.invokeMethod(toFP, "call", ret);
4.11 + }
4.12 ret = code.invokeFunction("Number", ret);
4.13 } catch (ScriptException ex) {
4.14 fail("Conversion to number failed in " + dumpJS(codeSeq) + ": " + ex.getMessage(), ex);
4.15 @@ -83,6 +86,9 @@
4.16 if (ret == null) {
4.17 return;
4.18 }
4.19 + if (expRes instanceof Integer && ret instanceof Double) {
4.20 + expRes = ((Integer)expRes).doubleValue();
4.21 + }
4.22 if (expRes != null && expRes.equals(ret)) {
4.23 return;
4.24 }
5.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Mon May 27 08:33:59 2013 +0200
5.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Thu Apr 24 18:05:21 2014 +0200
5.3 @@ -90,6 +90,9 @@
5.4 if (ret == null && expRes == null) {
5.5 return;
5.6 }
5.7 + if (expRes instanceof Double && ret instanceof Number) {
5.8 + ret = ((Number)ret).doubleValue();
5.9 + }
5.10 if (expRes.equals(ret)) {
5.11 return;
5.12 }