# HG changeset patch # User Jaroslav Tulach # Date 1398944616 -7200 # Node ID d6d1fc56585437b5787104631c49ea87cbd248c8 # Parent d2401e2648af38fe27d0d24d3a88da47022b0dca Don't reference Fn diff -r d2401e2648af -r d6d1fc565854 rt/emul/mini/src/main/java/java/lang/Class.java --- a/rt/emul/mini/src/main/java/java/lang/Class.java Wed Apr 30 15:57:56 2014 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Thu May 01 13:43:36 2014 +0200 @@ -35,6 +35,7 @@ import java.lang.reflect.TypeVariable; import java.net.URL; import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.core.JavaScriptOnly; import org.apidesign.bck2brwsr.emul.reflect.AnnotationImpl; import org.apidesign.bck2brwsr.emul.reflect.MethodImpl; @@ -1773,5 +1774,20 @@ + "\n}" ) static native Object clone(Object self) throws CloneNotSupportedException; - + + @JavaScriptOnly(name = "toJS", value = "function(v) {\n" + + " if (v === null) return null;\n" + + " if (Object.prototype.toString.call(v) === '[object Array]') {\n" + + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).convArray__Ljava_lang_Object_2Ljava_lang_Object_2(v);\n" + + " }\n" + + " return v.valueOf();\n" + + "}\n" + ) + static native int toJS(); + + @JavaScriptOnly(name = "activate__Ljava_io_Closeable_2Lorg_apidesign_html_boot_spi_Fn$Presenter_2", value = "function() {\n" + + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).activate__Ljava_io_Closeable_2();" + + "}\n" + ) + static native int activate(); } diff -r d2401e2648af -r d6d1fc565854 rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Wed Apr 30 15:57:56 2014 +0200 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Thu May 01 13:43:36 2014 +0200 @@ -17,9 +17,10 @@ */ package org.apidesign.bck2brwsr.emul.lang; +import java.io.Closeable; +import java.io.IOException; import java.lang.reflect.Method; import org.apidesign.bck2brwsr.core.JavaScriptBody; -import org.apidesign.bck2brwsr.core.JavaScriptOnly; /** * @@ -73,15 +74,15 @@ @JavaScriptBody(args = { "obj" }, body="return vm.java_lang_Object(false).hashCode__I.call(obj);") public static native int identityHashCode(Object obj); - @JavaScriptOnly(name = "toJS", value = "function(v) {\n" + - " if (v === null) return null;\n" + - " if (Object.prototype.toString.call(v) === '[object Array]') {\n" + - " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).convArray__Ljava_lang_Object_2Ljava_lang_Object_2(v);\n" + - " }\n" + - " return v.valueOf();\n" + - "}\n" - ) - public static native int toJS(); + public static Closeable activate() { + return DUMMY; + } + private static final Closeable DUMMY = new Closeable() { + @Override + public void close() throws IOException { + } + }; + private static Object convArray(Object o) { if (o instanceof Object[]) { diff -r d2401e2648af -r d6d1fc565854 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 30 15:57:56 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 01 13:43:36 2014 +0200 @@ -29,6 +29,7 @@ private ClassData jc; private final Appendable out; private boolean outChanged; + private boolean callbacks; protected ByteCodeToJavaScript(Appendable out) { this.out = out; @@ -140,6 +141,7 @@ protected String compile(ClassData classData) throws IOException { this.jc = classData; + this.callbacks = this.jc.getClassName().endsWith("/$JsCallbacks$"); if (jc.getMajor_version() < 50) { throw new IOException("Can't compile " + jc.getClassName() + ". Class file version " + jc.getMajor_version() + "." + jc.getMinor_version() + " - recompile with -target 1.6 (at least)." @@ -1586,7 +1588,13 @@ } final String in = mi[0]; - String object = accessClass(mangleClassName(in)) + "(false)"; + String mcn; + if (callbacks && in.equals("org/apidesign/html/boot/spi/Fn")) { + mcn = "java_lang_Class"; + } else { + mcn = mangleClassName(in); + } + String object = accessClass(mcn) + "(false)"; if (mn.startsWith("cons_")) { object += ".constructor"; } @@ -1735,7 +1743,8 @@ append(space); space = outputArg(this, p.args, index); if (p.html4j && space.length() > 0) { - toValue.append("\n ").append(p.args[index]).append(" = vm.org_apidesign_bck2brwsr_emul_lang_System(false).toJS("). + toValue.append("\n ").append(p.args[index]).append(" = ") + .append(accessClass("java_lang_Class")).append("(false).toJS("). append(p.args[index]).append(");"); } index++;