1.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java Wed Apr 30 15:57:56 2014 +0200
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Thu May 01 13:43:36 2014 +0200
1.3 @@ -35,6 +35,7 @@
1.4 import java.lang.reflect.TypeVariable;
1.5 import java.net.URL;
1.6 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.7 +import org.apidesign.bck2brwsr.core.JavaScriptOnly;
1.8 import org.apidesign.bck2brwsr.emul.reflect.AnnotationImpl;
1.9 import org.apidesign.bck2brwsr.emul.reflect.MethodImpl;
1.10
1.11 @@ -1773,5 +1774,20 @@
1.12 + "\n}"
1.13 )
1.14 static native Object clone(Object self) throws CloneNotSupportedException;
1.15 -
1.16 +
1.17 + @JavaScriptOnly(name = "toJS", value = "function(v) {\n"
1.18 + + " if (v === null) return null;\n"
1.19 + + " if (Object.prototype.toString.call(v) === '[object Array]') {\n"
1.20 + + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).convArray__Ljava_lang_Object_2Ljava_lang_Object_2(v);\n"
1.21 + + " }\n"
1.22 + + " return v.valueOf();\n"
1.23 + + "}\n"
1.24 + )
1.25 + static native int toJS();
1.26 +
1.27 + @JavaScriptOnly(name = "activate__Ljava_io_Closeable_2Lorg_apidesign_html_boot_spi_Fn$Presenter_2", value = "function() {\n"
1.28 + + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).activate__Ljava_io_Closeable_2();"
1.29 + + "}\n"
1.30 + )
1.31 + static native int activate();
1.32 }
2.1 --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Wed Apr 30 15:57:56 2014 +0200
2.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Thu May 01 13:43:36 2014 +0200
2.3 @@ -17,9 +17,10 @@
2.4 */
2.5 package org.apidesign.bck2brwsr.emul.lang;
2.6
2.7 +import java.io.Closeable;
2.8 +import java.io.IOException;
2.9 import java.lang.reflect.Method;
2.10 import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.11 -import org.apidesign.bck2brwsr.core.JavaScriptOnly;
2.12
2.13 /**
2.14 *
2.15 @@ -73,15 +74,15 @@
2.16 @JavaScriptBody(args = { "obj" }, body="return vm.java_lang_Object(false).hashCode__I.call(obj);")
2.17 public static native int identityHashCode(Object obj);
2.18
2.19 - @JavaScriptOnly(name = "toJS", value = "function(v) {\n" +
2.20 - " if (v === null) return null;\n" +
2.21 - " if (Object.prototype.toString.call(v) === '[object Array]') {\n" +
2.22 - " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).convArray__Ljava_lang_Object_2Ljava_lang_Object_2(v);\n" +
2.23 - " }\n" +
2.24 - " return v.valueOf();\n" +
2.25 - "}\n"
2.26 - )
2.27 - public static native int toJS();
2.28 + public static Closeable activate() {
2.29 + return DUMMY;
2.30 + }
2.31 + private static final Closeable DUMMY = new Closeable() {
2.32 + @Override
2.33 + public void close() throws IOException {
2.34 + }
2.35 + };
2.36 +
2.37
2.38 private static Object convArray(Object o) {
2.39 if (o instanceof Object[]) {
3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 30 15:57:56 2014 +0200
3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 01 13:43:36 2014 +0200
3.3 @@ -29,6 +29,7 @@
3.4 private ClassData jc;
3.5 private final Appendable out;
3.6 private boolean outChanged;
3.7 + private boolean callbacks;
3.8
3.9 protected ByteCodeToJavaScript(Appendable out) {
3.10 this.out = out;
3.11 @@ -140,6 +141,7 @@
3.12
3.13 protected String compile(ClassData classData) throws IOException {
3.14 this.jc = classData;
3.15 + this.callbacks = this.jc.getClassName().endsWith("/$JsCallbacks$");
3.16 if (jc.getMajor_version() < 50) {
3.17 throw new IOException("Can't compile " + jc.getClassName() + ". Class file version " + jc.getMajor_version() + "."
3.18 + jc.getMinor_version() + " - recompile with -target 1.6 (at least)."
3.19 @@ -1586,7 +1588,13 @@
3.20 }
3.21
3.22 final String in = mi[0];
3.23 - String object = accessClass(mangleClassName(in)) + "(false)";
3.24 + String mcn;
3.25 + if (callbacks && in.equals("org/apidesign/html/boot/spi/Fn")) {
3.26 + mcn = "java_lang_Class";
3.27 + } else {
3.28 + mcn = mangleClassName(in);
3.29 + }
3.30 + String object = accessClass(mcn) + "(false)";
3.31 if (mn.startsWith("cons_")) {
3.32 object += ".constructor";
3.33 }
3.34 @@ -1735,7 +1743,8 @@
3.35 append(space);
3.36 space = outputArg(this, p.args, index);
3.37 if (p.html4j && space.length() > 0) {
3.38 - toValue.append("\n ").append(p.args[index]).append(" = vm.org_apidesign_bck2brwsr_emul_lang_System(false).toJS(").
3.39 + toValue.append("\n ").append(p.args[index]).append(" = ")
3.40 + .append(accessClass("java_lang_Class")).append("(false).toJS(").
3.41 append(p.args[index]).append(");");
3.42 }
3.43 index++;