1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jun 10 05:52:44 2016 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jun 10 06:27:01 2016 +0200
1.3 @@ -1200,9 +1200,18 @@
1.4 case opc_new: {
1.5 int indx = readUShortArg(byteCodes, i);
1.6 String ci = jc.getClassName(indx);
1.7 - emit(smapper, this, "var @1 = new @2;",
1.8 - smapper.pushA(), accessClass(mangleClassName(ci)));
1.9 - addReference(ci);
1.10 + if (DirectlLibraries.isScriptLibrary(ci)) {
1.11 + int last = ci.lastIndexOf('/');
1.12 + emit(smapper, this, "var @1 = new @2",
1.13 + smapper.pushA(), ci.substring(last + 1)
1.14 + );
1.15 + // no new line
1.16 + outChanged = false;
1.17 + } else {
1.18 + emit(smapper, this, "var @1 = new @2;",
1.19 + smapper.pushA(), accessClass(mangleClassName(ci)));
1.20 + addReference(ci);
1.21 + }
1.22 i += 2;
1.23 break;
1.24 }
1.25 @@ -1822,15 +1831,25 @@
1.26
1.27 final String in = mi[0];
1.28 String mcn;
1.29 + final boolean direct = DirectlLibraries.isScriptLibrary(in);
1.30 + boolean skipThis = false;
1.31 if (callbacks && (
1.32 in.equals("org/apidesign/html/boot/spi/Fn") ||
1.33 in.equals("org/netbeans/html/boot/spi/Fn")
1.34 )) {
1.35 mcn = "java_lang_Class";
1.36 - } else if (DirectlLibraries.isScriptLibrary(in) && in.endsWith("/Exports")) {
1.37 - append(mi[1]);
1.38 - append('(');
1.39 - mcn = null;
1.40 + } else if (direct) {
1.41 + if (in.endsWith("/Exports")) {
1.42 + append(mi[1]);
1.43 + append('(');
1.44 + mcn = null;
1.45 + } else if (mn.startsWith("cons_")) {
1.46 + append('(');
1.47 + mcn = null;
1.48 + skipThis = true;
1.49 + } else {
1.50 + mcn = mangleClassName(in);
1.51 + }
1.52 } else {
1.53 mcn = mangleClassName(in);
1.54 }
1.55 @@ -1848,10 +1867,17 @@
1.56 addReference(in);
1.57 }
1.58 if (numArguments > 0) {
1.59 - append(vars[0]);
1.60 + String sep;
1.61 + if (!skipThis) {
1.62 + append(vars[0]);
1.63 + sep = ", ";
1.64 + } else {
1.65 + sep = "";
1.66 + }
1.67 for (int j = 1; j < numArguments; ++j) {
1.68 - append(", ");
1.69 + append(sep);
1.70 append(vars[j]);
1.71 + sep = ", ";
1.72 }
1.73 }
1.74 append(");");
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Fri Jun 10 05:52:44 2016 +0200
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Fri Jun 10 06:27:01 2016 +0200
2.3 @@ -17,6 +17,7 @@
2.4 */
2.5 package org.apidesign.vm4brwsr;
2.6
2.7 +import net.java.html.lib.Date;
2.8 import static net.java.html.lib.Exports.NaN;
2.9 import static net.java.html.lib.Exports.eval;
2.10 import static net.java.html.lib.Exports.isNaN;
2.11 @@ -57,4 +58,9 @@
2.12 return isNaN(nan);
2.13 }
2.14
2.15 + public double dateOperation() throws Exception {
2.16 + Date eleven = new Date(2016, 1, 10);
2.17 + return eleven.getFullYear() + eleven.getMonth();
2.18 + }
2.19 +
2.20 }
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Fri Jun 10 05:52:44 2016 +0200
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Fri Jun 10 06:27:01 2016 +0200
3.3 @@ -82,4 +82,13 @@
3.4 true
3.5 );
3.6 }
3.7 +
3.8 + @Test
3.9 + public void assertDateOperation() throws Exception {
3.10 + code.assertExec(
3.11 + "Create and read date", LibUse.class,
3.12 + "dateOperation__D",
3.13 + 2017.0
3.14 + );
3.15 + }
3.16 }