diff -r fae5261c8a9a -r b22dbc9329ec vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 12:14:37 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 01 15:30:56 2012 +0100 @@ -95,10 +95,13 @@ // ClassName sc = jc.getSuperClass(); String sc = jc.getSuperClassName(); // with _ if (sc != null) { - out.append("\n var p = CLS.prototype = "). + out.append("\n var pp = "). append(sc.replace('/', '_')).append("(true);"); + out.append("\n var p = CLS.prototype = pp;"); + out.append("\n var sprcls = pp.constructor.$class;"); } else { out.append("\n var p = CLS.prototype;"); + out.append("\n var sprcls = null;"); } for (MethodData m : jc.getMethods()) { if (m.isStatic()) { @@ -114,6 +117,7 @@ } out.append("\n CLS.$class = java_lang_Class(true);"); out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';"); + out.append("\n CLS.$class.superclass = sprcls;"); out.append("\n }"); out.append("\n if (arguments.length === 0) {"); out.append("\n if (!(this instanceof CLS)) {"); @@ -963,8 +967,12 @@ } } - private String encodeConstant(int entryIndex) { - String s = jc.stringValue(entryIndex, true); + private String encodeConstant(int entryIndex) throws IOException { + String[] classRef = { null }; + String s = jc.stringValue(entryIndex, classRef); + if (classRef[0] != null) { + addReference(classRef[0]); + } return s; }