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 }