rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 1840 9d011ab3c192
parent 1823 999cf0169156
child 1855 34efbdde4eca
child 1950 71e5cd5b29bc
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Apr 15 12:29:45 2015 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Sep 02 23:20:01 2015 +0200
     1.3 @@ -21,6 +21,15 @@
     1.4  import java.io.InputStream;
     1.5  import org.apidesign.bck2brwsr.core.JavaScriptBody;
     1.6  import static org.apidesign.vm4brwsr.ByteCodeParser.*;
     1.7 +import org.apidesign.vm4brwsr.ByteCodeParser.AnnotationParser;
     1.8 +import org.apidesign.vm4brwsr.ByteCodeParser.BootMethodData;
     1.9 +import org.apidesign.vm4brwsr.ByteCodeParser.CPX2;
    1.10 +import org.apidesign.vm4brwsr.ByteCodeParser.ClassData;
    1.11 +import org.apidesign.vm4brwsr.ByteCodeParser.FieldData;
    1.12 +import org.apidesign.vm4brwsr.ByteCodeParser.MethodData;
    1.13 +import org.apidesign.vm4brwsr.ByteCodeParser.StackMapIterator;
    1.14 +import org.apidesign.vm4brwsr.ByteCodeParser.TrapData;
    1.15 +import org.apidesign.vm4brwsr.ByteCodeParser.TrapDataIterator;
    1.16  
    1.17  /** Translator of the code inside class files to JavaScript.
    1.18   *
    1.19 @@ -87,7 +96,7 @@
    1.20      }
    1.21      
    1.22      final String accessClassFalse(String classOperation) {
    1.23 -        if (jc.getClassName().replace('/', '_').equals(classOperation)) {
    1.24 +        if (mangleClassName(jc.getClassName()).equals(classOperation)) {
    1.25              return "c";
    1.26          }
    1.27          classRefs.addIfMissing(classOperation);
    1.28 @@ -294,7 +303,7 @@
    1.29              }
    1.30          }
    1.31          for (String superInterface : jc.getSuperInterfaces()) {
    1.32 -            String intrfc = superInterface.replace('/', '_');
    1.33 +            String intrfc = mangleClassName(superInterface);
    1.34              append("\n      vm.").append(intrfc).append("(false)['fillInstOf'](x);");
    1.35              requireReference(superInterface);
    1.36          }
    1.37 @@ -1843,7 +1852,7 @@
    1.38          }
    1.39          if (d.charAt(0) == 'L') {
    1.40              assert d.charAt(d.length() - 1) == ';';
    1.41 -            out.append(d.replace('/', '_').substring(0, d.length() - 1));
    1.42 +            out.append(mangleClassName(d).substring(0, d.length() - 1));
    1.43          } else {
    1.44              out.append(d);
    1.45          }
    1.46 @@ -1977,7 +1986,7 @@
    1.47  
    1.48              int paramBeg = body.indexOf('(', sigEnd + 1);
    1.49              
    1.50 -            sb.append("vm.").append(pkgName.replace('/', '_')).append("_$JsCallbacks$(false)._VM().");
    1.51 +            sb.append("vm.").append(mangleClassName(pkgName)).append("_$JsCallbacks$(false)._VM().");
    1.52              sb.append(mangleJsCallbacks(fqn, method, params, false));
    1.53              sb.append("(").append(refId);
    1.54              if (body.charAt(paramBeg + 1) != ')') {
    1.55 @@ -2014,7 +2023,7 @@
    1.56  
    1.57              int paramBeg = body.indexOf('(', sigEnd + 1);
    1.58              
    1.59 -            sb.append("vm.").append(pkgName.replace('/', '_')).append("_$JsCallbacks$(false)._VM().");
    1.60 +            sb.append("vm.").append(mangleClassName(pkgName)).append("_$JsCallbacks$(false)._VM().");
    1.61              sb.append(mangleJsCallbacks(fqn, method, params, true));
    1.62              sb.append("(");
    1.63              pos = paramBeg + 1;
    1.64 @@ -2258,7 +2267,7 @@
    1.65                  final String classInternalName = jc.getClassName(e.catch_cpx);
    1.66                  addReference(classInternalName);
    1.67                  append("e = vm.java_lang_Class(false).bck2BrwsrThrwrbl(e);");
    1.68 -                append("if (e['$instOf_" + classInternalName.replace('/', '_') + "']) {");
    1.69 +                append("if (e['$instOf_" + mangleClassName(classInternalName) + "']) {");
    1.70                  append("var stA0 = e;");
    1.71                  goTo(this, current, e.handler_pc, topMostLabel);
    1.72                  append("}\n");
    1.73 @@ -2406,7 +2415,7 @@
    1.74              emit(smapper, this, 
    1.75                      "var @2 = @1 != null && @1['$instOf_@3'] ? 1 : 0;",
    1.76                   smapper.popA(), smapper.pushI(),
    1.77 -                 type.replace('/', '_'));
    1.78 +                 mangleClassName(type));
    1.79          } else {
    1.80              int cnt = 0;
    1.81              while (type.charAt(cnt) == '[') {
    1.82 @@ -2435,7 +2444,7 @@
    1.83          if (!type.startsWith("[")) {
    1.84              emitNoFlush(smapper, 
    1.85                   "if (@1 !== null && !@1['$instOf_@2']) vm.java_lang_Class(false).castEx();",
    1.86 -                 smapper.getT(0, VarType.REFERENCE, false), type.replace('/', '_'));
    1.87 +                 smapper.getT(0, VarType.REFERENCE, false), mangleClassName(type));
    1.88          } else {
    1.89              int cnt = 0;
    1.90              while (type.charAt(cnt) == '[') {