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 Thu Dec 06 21:31:09 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 }