1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 30 15:57:56 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 01 13:43:36 2014 +0200
1.3 @@ -29,6 +29,7 @@
1.4 private ClassData jc;
1.5 private final Appendable out;
1.6 private boolean outChanged;
1.7 + private boolean callbacks;
1.8
1.9 protected ByteCodeToJavaScript(Appendable out) {
1.10 this.out = out;
1.11 @@ -140,6 +141,7 @@
1.12
1.13 protected String compile(ClassData classData) throws IOException {
1.14 this.jc = classData;
1.15 + this.callbacks = this.jc.getClassName().endsWith("/$JsCallbacks$");
1.16 if (jc.getMajor_version() < 50) {
1.17 throw new IOException("Can't compile " + jc.getClassName() + ". Class file version " + jc.getMajor_version() + "."
1.18 + jc.getMinor_version() + " - recompile with -target 1.6 (at least)."
1.19 @@ -1586,7 +1588,13 @@
1.20 }
1.21
1.22 final String in = mi[0];
1.23 - String object = accessClass(mangleClassName(in)) + "(false)";
1.24 + String mcn;
1.25 + if (callbacks && in.equals("org/apidesign/html/boot/spi/Fn")) {
1.26 + mcn = "java_lang_Class";
1.27 + } else {
1.28 + mcn = mangleClassName(in);
1.29 + }
1.30 + String object = accessClass(mcn) + "(false)";
1.31 if (mn.startsWith("cons_")) {
1.32 object += ".constructor";
1.33 }
1.34 @@ -1735,7 +1743,8 @@
1.35 append(space);
1.36 space = outputArg(this, p.args, index);
1.37 if (p.html4j && space.length() > 0) {
1.38 - toValue.append("\n ").append(p.args[index]).append(" = vm.org_apidesign_bck2brwsr_emul_lang_System(false).toJS(").
1.39 + toValue.append("\n ").append(p.args[index]).append(" = ")
1.40 + .append(accessClass("java_lang_Class")).append("(false).toJS(").
1.41 append(p.args[index]).append(");");
1.42 }
1.43 index++;