1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 12:14:37 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 15:30:56 2012 +0100
1.3 @@ -95,10 +95,13 @@
1.4 // ClassName sc = jc.getSuperClass();
1.5 String sc = jc.getSuperClassName(); // with _
1.6 if (sc != null) {
1.7 - out.append("\n var p = CLS.prototype = ").
1.8 + out.append("\n var pp = ").
1.9 append(sc.replace('/', '_')).append("(true);");
1.10 + out.append("\n var p = CLS.prototype = pp;");
1.11 + out.append("\n var sprcls = pp.constructor.$class;");
1.12 } else {
1.13 out.append("\n var p = CLS.prototype;");
1.14 + out.append("\n var sprcls = null;");
1.15 }
1.16 for (MethodData m : jc.getMethods()) {
1.17 if (m.isStatic()) {
1.18 @@ -114,6 +117,7 @@
1.19 }
1.20 out.append("\n CLS.$class = java_lang_Class(true);");
1.21 out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
1.22 + out.append("\n CLS.$class.superclass = sprcls;");
1.23 out.append("\n }");
1.24 out.append("\n if (arguments.length === 0) {");
1.25 out.append("\n if (!(this instanceof CLS)) {");
1.26 @@ -963,8 +967,12 @@
1.27 }
1.28 }
1.29
1.30 - private String encodeConstant(int entryIndex) {
1.31 - String s = jc.stringValue(entryIndex, true);
1.32 + private String encodeConstant(int entryIndex) throws IOException {
1.33 + String[] classRef = { null };
1.34 + String s = jc.stringValue(entryIndex, classRef);
1.35 + if (classRef[0] != null) {
1.36 + addReference(classRef[0]);
1.37 + }
1.38 return s;
1.39 }
1.40