vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 306 f36b3c273de6
parent 291 c6f21b56a6cf
parent 303 c12342170235
child 316 8da329789435
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Dec 09 16:43:36 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Dec 12 09:09:42 2012 +0100
     1.3 @@ -19,6 +19,7 @@
     1.4  
     1.5  import java.io.IOException;
     1.6  import java.io.InputStream;
     1.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
     1.8  import org.apidesign.javap.AnnotationParser;
     1.9  import org.apidesign.javap.ClassData;
    1.10  import org.apidesign.javap.FieldData;
    1.11 @@ -29,7 +30,7 @@
    1.12   *
    1.13   * @author Jaroslav Tulach <jtulach@netbeans.org>
    1.14   */
    1.15 -public abstract class ByteCodeToJavaScript {
    1.16 +abstract class ByteCodeToJavaScript {
    1.17      private ClassData jc;
    1.18      final Appendable out;
    1.19  
    1.20 @@ -56,9 +57,12 @@
    1.21       * 
    1.22       * @param className suggested name of the class
    1.23       */
    1.24 -    protected String assignClass(String className) {
    1.25 +    /* protected */ String assignClass(String className) {
    1.26          return className + " = ";
    1.27      }
    1.28 +    /* protected */ String accessClass(String classOperation) {
    1.29 +        return classOperation;
    1.30 +    }
    1.31  
    1.32      /**
    1.33       * Converts a given class file to a JavaScript version.
    1.34 @@ -99,7 +103,7 @@
    1.35          if (proto == null) {
    1.36              String sc = jc.getSuperClassName(); // with _
    1.37              out.append("\n    var pp = ").
    1.38 -                append(sc.replace('/', '_')).append("(true);");
    1.39 +                append(accessClass(sc.replace('/', '_'))).append("(true);");
    1.40              out.append("\n    var p = CLS.prototype = pp;");
    1.41              out.append("\n    var c = p;");
    1.42              out.append("\n    var sprcls = pp.constructor.$class;");
    1.43 @@ -139,7 +143,8 @@
    1.44          for (String superInterface : jc.getSuperInterfaces()) {
    1.45              out.append("\n    c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.46          }
    1.47 -        out.append("\n    CLS.$class = java_lang_Class(true);");
    1.48 +        out.append("\n    CLS.$class = ");
    1.49 +        out.append(accessClass("java_lang_Class(true);"));
    1.50          out.append("\n    CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
    1.51          out.append("\n    CLS.$class.superclass = sprcls;");
    1.52          out.append("\n    CLS.$class.cnstr = CLS;");
    1.53 @@ -191,7 +196,7 @@
    1.54          final String mn = findMethodName(m, argsCnt);
    1.55          out.append(prefix).append(mn).append(" = function");
    1.56          if (mn.equals("class__V")) {
    1.57 -            toInitilize.add(className(jc) + "(false)." + mn);
    1.58 +            toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
    1.59          }
    1.60          out.append('(');
    1.61          String space = "";
    1.62 @@ -638,7 +643,7 @@
    1.63                      int indx = readIntArg(byteCodes, i);
    1.64                      String ci = jc.getClassName(indx);
    1.65                      out.append("s.push(new ");
    1.66 -                    out.append(ci.replace('/','_'));
    1.67 +                    out.append(accessClass(ci.replace('/','_')));
    1.68                      out.append("());");
    1.69                      addReference(ci);
    1.70                      i += 2;
    1.71 @@ -731,7 +736,7 @@
    1.72                  case opc_getstatic: {
    1.73                      int indx = readIntArg(byteCodes, i);
    1.74                      String[] fi = jc.getFieldInfoName(indx);
    1.75 -                    out.append("s.push(").append(fi[0].replace('/', '_'));
    1.76 +                    out.append("s.push(").append(accessClass(fi[0].replace('/', '_')));
    1.77                      out.append('.').append(fi[1]).append(");");
    1.78                      i += 2;
    1.79                      addReference(fi[0]);
    1.80 @@ -740,7 +745,7 @@
    1.81                  case opc_putstatic: {
    1.82                      int indx = readIntArg(byteCodes, i);
    1.83                      String[] fi = jc.getFieldInfoName(indx);
    1.84 -                    out.append(fi[0].replace('/', '_'));
    1.85 +                    out.append(accessClass(fi[0].replace('/', '_')));
    1.86                      out.append('.').append(fi[1]).append(" = s.pop();");
    1.87                      i += 2;
    1.88                      addReference(fi[0]);
    1.89 @@ -951,7 +956,7 @@
    1.90              out.append("s.push(");
    1.91          }
    1.92          final String in = mi[0];
    1.93 -        out.append(in.replace('/', '_'));
    1.94 +        out.append(accessClass(in.replace('/', '_')));
    1.95          out.append("(false).");
    1.96          out.append(mn);
    1.97          out.append('(');
    1.98 @@ -1031,6 +1036,7 @@
    1.99          String s = jc.stringValue(entryIndex, classRef);
   1.100          if (classRef[0] != null) {
   1.101              addReference(classRef[0]);
   1.102 +            s = accessClass(s.replace('/', '_')) + "(false).constructor.$class";
   1.103          }
   1.104          return s;
   1.105      }