1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 09 20:36:12 2015 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 09 21:30:04 2015 +0100
1.3 @@ -85,6 +85,13 @@
1.4 /* protected */ String accessClass(String classOperation) {
1.5 return classOperation;
1.6 }
1.7 +
1.8 + String accessClassFalse(String classOperation) {
1.9 + if (jc.getClassName().replace('/', '_').equals(classOperation)) {
1.10 + return "c";
1.11 + }
1.12 + return accessClass(classOperation) + "(false)";
1.13 + }
1.14
1.15 protected String accessField(String object, String mangledName,
1.16 String[] fieldInfoName) throws IOException {
1.17 @@ -383,9 +390,9 @@
1.18 boolean defineProp = generateMethod(destObject, mn, m);
1.19 if (mn.equals("class__V")) {
1.20 if (defineProp) {
1.21 - toInitilize.add(accessClass(className(jc)) + "(false)['" + mn + "']");
1.22 + toInitilize.add(accessClassFalse(className(jc)) + "['" + mn + "']");
1.23 } else {
1.24 - toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
1.25 + toInitilize.add(accessClassFalse(className(jc)) + "." + mn);
1.26 }
1.27 }
1.28 return mn;
1.29 @@ -1392,10 +1399,10 @@
1.30 String[] fi = jc.getFieldInfoName(indx);
1.31 final int type = VarType.fromFieldType(fi[2].charAt(0));
1.32 final String mangleClass = mangleClassName(fi[0]);
1.33 - final String mangleClassAccess = accessClass(mangleClass);
1.34 + final String mangleClassAccess = accessClassFalse(mangleClass);
1.35 smapper.replace(this, type, "@2.call(@1)",
1.36 smapper.getA(0),
1.37 - accessField(mangleClassAccess + "(false)",
1.38 + accessField(mangleClassAccess,
1.39 "_" + fi[1], fi)
1.40 );
1.41 i += 2;
1.42 @@ -1407,11 +1414,11 @@
1.43 String[] fi = jc.getFieldInfoName(indx);
1.44 final int type = VarType.fromFieldType(fi[2].charAt(0));
1.45 final String mangleClass = mangleClassName(fi[0]);
1.46 - final String mangleClassAccess = accessClass(mangleClass);
1.47 + final String mangleClassAccess = accessClassFalse(mangleClass);
1.48 emit(smapper, this, "@3.call(@2, @1);",
1.49 smapper.popT(type),
1.50 smapper.popA(),
1.51 - accessField(mangleClassAccess + "(false)",
1.52 + accessField(mangleClassAccess,
1.53 "_" + fi[1], fi));
1.54 i += 2;
1.55 addReference(fi[0]);
1.56 @@ -1421,8 +1428,8 @@
1.57 int indx = readUShortArg(byteCodes, i);
1.58 String[] fi = jc.getFieldInfoName(indx);
1.59 final int type = VarType.fromFieldType(fi[2].charAt(0));
1.60 - String ac = accessClass(mangleClassName(fi[0]));
1.61 - String af = accessField(ac + "(false)", "_" + fi[1], fi);
1.62 + String ac = accessClassFalse(mangleClassName(fi[0]));
1.63 + String af = accessField(ac, "_" + fi[1], fi);
1.64 smapper.assign(this, type, af + "()");
1.65 i += 2;
1.66 addReference(fi[0]);
1.67 @@ -1432,8 +1439,8 @@
1.68 int indx = readUShortArg(byteCodes, i);
1.69 String[] fi = jc.getFieldInfoName(indx);
1.70 final int type = VarType.fromFieldType(fi[2].charAt(0));
1.71 - emit(smapper, this, "@1(false)._@2(@3);",
1.72 - accessClass(mangleClassName(fi[0])), fi[1],
1.73 + emit(smapper, this, "@1._@2(@3);",
1.74 + accessClassFalse(mangleClassName(fi[0])), fi[1],
1.75 smapper.popT(type));
1.76 i += 2;
1.77 addReference(fi[0]);
1.78 @@ -1755,7 +1762,7 @@
1.79 } else {
1.80 mcn = mangleClassName(in);
1.81 }
1.82 - String object = accessClass(mcn) + "(false)";
1.83 + String object = accessClassFalse(mcn);
1.84 if (mn.startsWith("cons_")) {
1.85 object += ".constructor";
1.86 }
1.87 @@ -1838,7 +1845,7 @@
1.88 s = accessClass("java_lang_Class") + "(false)['forName__Ljava_lang_Class_2Ljava_lang_String_2']('" + classRef[0] + "')";
1.89 } else {
1.90 addReference(classRef[0]);
1.91 - s = accessClass(mangleClassName(s)) + "(false).constructor.$class";
1.92 + s = accessClassFalse(mangleClassName(s)) + ".constructor.$class";
1.93 }
1.94 }
1.95 return s;
1.96 @@ -2166,8 +2173,8 @@
1.97 requireReference(slashType);
1.98
1.99 final String cn = mangleClassName(slashType);
1.100 - append(accessClass(cn))
1.101 - .append("(false)['valueOf__L").
1.102 + append(accessClassFalse(cn))
1.103 + .append("['valueOf__L").
1.104 append(cn).
1.105 append("_2Ljava_lang_String_2']('").
1.106 append(value).