# HG changeset patch # User Jaroslav Tulach # Date 1383149723 -3600 # Node ID da9e5973e699c68c92cb0cd7e676ebade54e2cce # Parent 4cd2c7e22646450cf9cc903973d2fa34f5a5727c Adopting to JDK8's Nashorn differences. Most tests should now pass with Nashorn now. diff -r 4cd2c7e22646 -r da9e5973e699 rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js Wed Oct 30 11:24:41 2013 +0100 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js Wed Oct 30 17:15:23 2013 +0100 @@ -2,16 +2,16 @@ vm.java_lang_reflect_Array(false); vm.java_lang_String(false); -Array.prototype.at = function(indx, value) { - if (indx < 0 || indx >= this.length) { +Array.at = function(arr, indx, value) { + if (indx < 0 || indx >= arr.length) { var e = vm.java_lang_ArrayIndexOutOfBoundsException(true); e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString()); throw e; } - if (arguments.length === 2) { - this[indx] = value; + if (arguments.length === 3) { + arr[indx] = value; } - return this[indx]; + return arr[indx]; }; Array.prototype.getClass__Ljava_lang_Class_2 = function() { return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2(this.jvmName); diff -r 4cd2c7e22646 -r da9e5973e699 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Oct 30 11:24:41 2013 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Oct 30 17:15:23 2013 +0100 @@ -1001,49 +1001,49 @@ smapper.popA(), smapper.pushI()); break; case opc_lastore: - emit(out, "@3.at(@2, @1);", + emit(out, "Array.at(@3, @2, @1);", smapper.popL(), smapper.popI(), smapper.popA()); break; case opc_fastore: - emit(out, "@3.at(@2, @1);", + emit(out, "Array.at(@3, @2, @1);", smapper.popF(), smapper.popI(), smapper.popA()); break; case opc_dastore: - emit(out, "@3.at(@2, @1);", + emit(out, "Array.at(@3, @2, @1);", smapper.popD(), smapper.popI(), smapper.popA()); break; case opc_aastore: - emit(out, "@3.at(@2, @1);", + emit(out, "Array.at(@3, @2, @1);", smapper.popA(), smapper.popI(), smapper.popA()); break; case opc_iastore: case opc_bastore: case opc_castore: case opc_sastore: - emit(out, "@3.at(@2, @1);", + emit(out, "Array.at(@3, @2, @1);", smapper.popI(), smapper.popI(), smapper.popA()); break; case opc_laload: - emit(out, "var @3 = @2.at(@1);", + emit(out, "var @3 = Array.at(@2, @1);", smapper.popI(), smapper.popA(), smapper.pushL()); break; case opc_faload: - emit(out, "var @3 = @2.at(@1);", + emit(out, "var @3 = Array.at(@2, @1);", smapper.popI(), smapper.popA(), smapper.pushF()); break; case opc_daload: - emit(out, "var @3 = @2.at(@1);", + emit(out, "var @3 = Array.at(@2, @1);", smapper.popI(), smapper.popA(), smapper.pushD()); break; case opc_aaload: - emit(out, "var @3 = @2.at(@1);", + emit(out, "var @3 = Array.at(@2, @1);", smapper.popI(), smapper.popA(), smapper.pushA()); break; case opc_iaload: case opc_baload: case opc_caload: case opc_saload: - emit(out, "var @3 = @2.at(@1);", + emit(out, "var @3 = Array.at(@2, @1);", smapper.popI(), smapper.popA(), smapper.pushI()); break; case opc_pop: diff -r 4cd2c7e22646 -r da9e5973e699 rt/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Wed Oct 30 11:24:41 2013 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ExceptionsTest.java Wed Oct 30 17:15:23 2013 +0100 @@ -94,12 +94,14 @@ { // 2nd invocation Object ret = code.invokeMethod(clazz, method, "java.lang.String"); - assertEquals(ret, Double.valueOf(2)); + assertTrue(ret instanceof Number, "Is number: " + ret); + assertEquals(((Number)ret).doubleValue(), 2.0); } { // 3rd invocation Object ret = code.invokeMethod(clazz, method, "java.lang.Integer"); - assertEquals(ret, Double.valueOf(3)); + assertTrue(ret instanceof Number, "Is number: " + ret); + assertEquals(((Number)ret).doubleValue(), 3.0); } } diff -r 4cd2c7e22646 -r da9e5973e699 rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java Wed Oct 30 11:24:41 2013 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java Wed Oct 30 17:15:23 2013 +0100 @@ -75,7 +75,10 @@ // in case of Long it is necessary convert it to number // since the Long is represented by two numbers in JavaScript try { - ret = code.invokeMethod(ret, "toFP"); + final Object toFP = ((ScriptEngine)code).eval("Number.prototype.toFP"); + if (ret instanceof Long) { + ret = code.invokeMethod(toFP, "call", ret); + } ret = code.invokeFunction("Number", ret); } catch (ScriptException ex) { fail("Conversion to number failed in " + dumpJS(codeSeq) + ": " + ex.getMessage(), ex); @@ -93,6 +96,9 @@ if (ret == null) { return; } + if (expRes instanceof Integer && ret instanceof Double) { + expRes = ((Integer)expRes).doubleValue(); + } if (expRes != null && expRes.equals(ret)) { return; } diff -r 4cd2c7e22646 -r da9e5973e699 rt/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Wed Oct 30 11:24:41 2013 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Wed Oct 30 17:15:23 2013 +0100 @@ -90,6 +90,9 @@ if (ret == null && expRes == null) { return; } + if (expRes instanceof Double && ret instanceof Number) { + ret = ((Number)ret).doubleValue(); + } if (expRes.equals(ret)) { return; }