vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchreflection
changeset 230 b22dbc9329ec
parent 227 fae5261c8a9a
child 231 dde8422fb5ae
     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