# HG changeset patch # User Jaroslav Tulach # Date 1465530764 -7200 # Node ID de609e0cdab56e70a5838e2417962c671b62e333 # Parent 958a3b7fad36cf5903625fb1bc1d16ac74b3775f Make sure Boolean.prototype contains the Java methods soon enough diff -r 958a3b7fad36 -r de609e0cdab5 rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/BooleanTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/BooleanTest.java Fri Jun 10 05:52:44 2016 +0200 @@ -0,0 +1,47 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012-2015 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.bck2brwsr.tck; + +import net.java.html.js.JavaScriptBody; +import org.apidesign.bck2brwsr.vmtest.BrwsrTest; +import org.apidesign.bck2brwsr.vmtest.VMTest; +import org.testng.annotations.Factory; + +public class BooleanTest { + @JavaScriptBody(args = { }, body = "return true;") + private static native Boolean getTrue(); + + @JavaScriptBody(args = { }, body = "return false;") + private static native Boolean getFalse(); + + @BrwsrTest public void primitiveTrue() { + boolean t = getTrue(); + assert t : "Yes, it is true"; + } + + @BrwsrTest public void primitiveFalse() { + boolean t = getFalse(); + assert !t : "Yes, it is false"; + } + + @Factory + public static Object[] create() { + return VMTest.create(BooleanTest.class); + } + +} diff -r 958a3b7fad36 -r de609e0cdab5 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 Jun 08 07:15:54 2016 +0200 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js Fri Jun 10 05:52:44 2016 +0200 @@ -1,6 +1,7 @@ // initialize methods on arrays and String constants vm.java_lang_reflect_Array(false); vm.java_lang_String(false); +vm.java_lang_Boolean(false); Object.defineProperty(Array, "at", { configurable: true, writable: true, value : function(arr, indx, value) { var prev = arr[indx]; diff -r 958a3b7fad36 -r de609e0cdab5 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Jun 08 07:15:54 2016 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jun 10 05:52:44 2016 +0200 @@ -1491,12 +1491,16 @@ int indx = readUShortArg(byteCodes, i); String[] fi = jc.getFieldInfoName(indx); final int type = VarType.fromFieldType(fi[2].charAt(0)); - String ac = accessClassFalse(mangleClassName(fi[0])); - FieldData field = findField(fi); - String af = accessField(ac, field, fi); - smapper.assign(this, type, af + "()"); + if (DirectlLibraries.isScriptLibrary(fi[0]) && fi[0].endsWith("/Exports")) { + smapper.assign(this, type, fi[1]); + } else { + String ac = accessClassFalse(mangleClassName(fi[0])); + FieldData field = findField(fi); + String af = accessField(ac, field, fi); + smapper.assign(this, type, af + "()"); + addReference(fi[0]); + } i += 2; - addReference(fi[0]); break; } case opc_putstatic: { diff -r 958a3b7fad36 -r de609e0cdab5 rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Wed Jun 08 07:15:54 2016 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Fri Jun 10 05:52:44 2016 +0200 @@ -17,7 +17,9 @@ */ package org.apidesign.vm4brwsr; +import static net.java.html.lib.Exports.NaN; import static net.java.html.lib.Exports.eval; +import static net.java.html.lib.Exports.isNaN; import static net.java.html.lib.Exports.parseInt; import net.java.html.lib.Objs; @@ -50,4 +52,9 @@ return parseInt(str, radix); } + public boolean checkNaN() throws Exception { + double nan = NaN; + return isNaN(nan); + } + } diff -r 958a3b7fad36 -r de609e0cdab5 rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Wed Jun 08 07:15:54 2016 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Fri Jun 10 05:52:44 2016 +0200 @@ -73,4 +73,13 @@ 15, "F", 16 ); } + + @Test + public void verifyNaN() throws Exception { + code.assertExec( + "Check NaN", LibUse.class, + "checkNaN__Z", + true + ); + } }