rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchclosure
changeset 1515 d6d1fc565854
parent 1514 d2401e2648af
child 1522 0d32bf6b4436
     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++;