diff -r a6a23aa7a546 -r 81f6e7778135 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Dec 06 16:11:48 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Dec 06 21:31:09 2012 +0100 @@ -56,9 +56,12 @@ * * @param className suggested name of the class */ - protected String assignClass(String className) { + /* protected */ String assignClass(String className) { return className + " = "; } + /* protected */ String accessClass(String classOperation) { + return classOperation; + } /** * Converts a given class file to a JavaScript version. @@ -99,7 +102,7 @@ if (proto == null) { String sc = jc.getSuperClassName(); // with _ out.append("\n var pp = "). - append(sc.replace('/', '_')).append("(true);"); + append(accessClass(sc.replace('/', '_'))).append("(true);"); out.append("\n var p = CLS.prototype = pp;"); out.append("\n var c = p;"); out.append("\n var sprcls = pp.constructor.$class;"); @@ -139,7 +142,8 @@ for (String superInterface : jc.getSuperInterfaces()) { out.append("\n c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;"); } - out.append("\n CLS.$class = java_lang_Class(true);"); + out.append("\n CLS.$class = "); + out.append(accessClass("java_lang_Class(true);")); out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';"); out.append("\n CLS.$class.superclass = sprcls;"); out.append("\n CLS.$class.cnstr = CLS;"); @@ -191,7 +195,7 @@ final String mn = findMethodName(m, argsCnt); out.append(prefix).append(mn).append(" = function"); if (mn.equals("class__V")) { - toInitilize.add(className(jc) + "(false)." + mn); + toInitilize.add(accessClass(className(jc)) + "(false)." + mn); } out.append('('); String space = ""; @@ -638,7 +642,7 @@ int indx = readIntArg(byteCodes, i); String ci = jc.getClassName(indx); out.append("s.push(new "); - out.append(ci.replace('/','_')); + out.append(accessClass(ci.replace('/','_'))); out.append("());"); addReference(ci); i += 2; @@ -731,7 +735,7 @@ case opc_getstatic: { int indx = readIntArg(byteCodes, i); String[] fi = jc.getFieldInfoName(indx); - out.append("s.push(").append(fi[0].replace('/', '_')); + out.append("s.push(").append(accessClass(fi[0].replace('/', '_'))); out.append('.').append(fi[1]).append(");"); i += 2; addReference(fi[0]); @@ -740,7 +744,7 @@ case opc_putstatic: { int indx = readIntArg(byteCodes, i); String[] fi = jc.getFieldInfoName(indx); - out.append(fi[0].replace('/', '_')); + out.append(accessClass(fi[0].replace('/', '_'))); out.append('.').append(fi[1]).append(" = s.pop();"); i += 2; addReference(fi[0]); @@ -951,7 +955,7 @@ out.append("s.push("); } final String in = mi[0]; - out.append(in.replace('/', '_')); + out.append(accessClass(in.replace('/', '_'))); out.append("(false)."); out.append(mn); out.append('('); @@ -1031,6 +1035,7 @@ String s = jc.stringValue(entryIndex, classRef); if (classRef[0] != null) { addReference(classRef[0]); + s = accessClass(s.replace('/', '_')) + "(false).constructor.$class"; } return s; }