vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchlazyvm
changeset 279 ee34358037b3
parent 272 a6a23aa7a546
child 298 885acca2fa0b
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Dec 06 16:11:48 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Dec 07 10:09:50 2012 +0100
     1.3 @@ -56,9 +56,12 @@
     1.4       * 
     1.5       * @param className suggested name of the class
     1.6       */
     1.7 -    protected String assignClass(String className) {
     1.8 +    /* protected */ String assignClass(String className) {
     1.9          return className + " = ";
    1.10      }
    1.11 +    /* protected */ String accessClass(String classOperation) {
    1.12 +        return classOperation;
    1.13 +    }
    1.14  
    1.15      /**
    1.16       * Converts a given class file to a JavaScript version.
    1.17 @@ -99,7 +102,7 @@
    1.18          if (proto == null) {
    1.19              String sc = jc.getSuperClassName(); // with _
    1.20              out.append("\n    var pp = ").
    1.21 -                append(sc.replace('/', '_')).append("(true);");
    1.22 +                append(accessClass(sc.replace('/', '_'))).append("(true);");
    1.23              out.append("\n    var p = CLS.prototype = pp;");
    1.24              out.append("\n    var c = p;");
    1.25              out.append("\n    var sprcls = pp.constructor.$class;");
    1.26 @@ -139,7 +142,8 @@
    1.27          for (String superInterface : jc.getSuperInterfaces()) {
    1.28              out.append("\n    c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.29          }
    1.30 -        out.append("\n    CLS.$class = java_lang_Class(true);");
    1.31 +        out.append("\n    CLS.$class = ");
    1.32 +        out.append(accessClass("java_lang_Class(true);"));
    1.33          out.append("\n    CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
    1.34          out.append("\n    CLS.$class.superclass = sprcls;");
    1.35          out.append("\n    CLS.$class.cnstr = CLS;");
    1.36 @@ -191,7 +195,7 @@
    1.37          final String mn = findMethodName(m, argsCnt);
    1.38          out.append(prefix).append(mn).append(" = function");
    1.39          if (mn.equals("class__V")) {
    1.40 -            toInitilize.add(className(jc) + "(false)." + mn);
    1.41 +            toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
    1.42          }
    1.43          out.append('(');
    1.44          String space = "";
    1.45 @@ -638,7 +642,7 @@
    1.46                      int indx = readIntArg(byteCodes, i);
    1.47                      String ci = jc.getClassName(indx);
    1.48                      out.append("s.push(new ");
    1.49 -                    out.append(ci.replace('/','_'));
    1.50 +                    out.append(accessClass(ci.replace('/','_')));
    1.51                      out.append("());");
    1.52                      addReference(ci);
    1.53                      i += 2;
    1.54 @@ -731,7 +735,7 @@
    1.55                  case opc_getstatic: {
    1.56                      int indx = readIntArg(byteCodes, i);
    1.57                      String[] fi = jc.getFieldInfoName(indx);
    1.58 -                    out.append("s.push(").append(fi[0].replace('/', '_'));
    1.59 +                    out.append("s.push(").append(accessClass(fi[0].replace('/', '_')));
    1.60                      out.append('.').append(fi[1]).append(");");
    1.61                      i += 2;
    1.62                      addReference(fi[0]);
    1.63 @@ -740,7 +744,7 @@
    1.64                  case opc_putstatic: {
    1.65                      int indx = readIntArg(byteCodes, i);
    1.66                      String[] fi = jc.getFieldInfoName(indx);
    1.67 -                    out.append(fi[0].replace('/', '_'));
    1.68 +                    out.append(accessClass(fi[0].replace('/', '_')));
    1.69                      out.append('.').append(fi[1]).append(" = s.pop();");
    1.70                      i += 2;
    1.71                      addReference(fi[0]);
    1.72 @@ -951,7 +955,7 @@
    1.73              out.append("s.push(");
    1.74          }
    1.75          final String in = mi[0];
    1.76 -        out.append(in.replace('/', '_'));
    1.77 +        out.append(accessClass(in.replace('/', '_')));
    1.78          out.append("(false).");
    1.79          out.append(mn);
    1.80          out.append('(');
    1.81 @@ -1031,6 +1035,7 @@
    1.82          String s = jc.stringValue(entryIndex, classRef);
    1.83          if (classRef[0] != null) {
    1.84              addReference(classRef[0]);
    1.85 +            s = accessClass(s.replace('/', '_')) + "(false).constructor.$class";
    1.86          }
    1.87          return s;
    1.88      }