vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 239 8ceee38f5840
parent 232 36f16c49bdef
child 240 4e88a33d7972
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Dec 02 06:25:28 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Dec 02 21:00:12 2012 +0100
     1.3 @@ -82,6 +82,10 @@
     1.4                  return null;
     1.5              }
     1.6          }
     1.7 +        String[] proto = findAnnotation(arrData, jc, 
     1.8 +            "org.apidesign.bck2brwsr.core.JavaScriptPrototype", 
     1.9 +            "container", "prototype"
    1.10 +        );
    1.11          StringArray toInitilize = new StringArray();
    1.12          final String className = className(jc);
    1.13          out.append("\n\n").append(assignClass(className));
    1.14 @@ -92,25 +96,26 @@
    1.15                  out.append("\n  CLS.").append(v.getName()).append(initField(v));
    1.16              }
    1.17          }
    1.18 -        // ClassName sc = jc.getSuperClass();
    1.19 -        String sc = jc.getSuperClassName(); // with _
    1.20 -        if (sc != null) {
    1.21 +        if (proto == null) {
    1.22 +            String sc = jc.getSuperClassName(); // with _
    1.23              out.append("\n    var p = CLS.prototype = ").
    1.24                  append(sc.replace('/', '_')).append("(true);");
    1.25 +            out.append("\n    var c = p;");
    1.26          } else {
    1.27 -            out.append("\n    var p = CLS.prototype;");
    1.28 +            out.append("\n    var p = ").append(proto[1]).append(";");
    1.29 +            out.append("\n    var c = ").append(proto[0]).append(";");
    1.30          }
    1.31          for (MethodData m : jc.getMethods()) {
    1.32              if (m.isStatic()) {
    1.33 -                generateStaticMethod("\n    p.", m, toInitilize);
    1.34 +                generateStaticMethod("\n    c.", m, toInitilize);
    1.35              } else {
    1.36 -                generateInstanceMethod("\n    p.", m);
    1.37 +                generateInstanceMethod("\n    c.", m);
    1.38              }
    1.39          }
    1.40 -        out.append("\n    p.constructor = CLS;");
    1.41 -        out.append("\n    p.$instOf_").append(className).append(" = true;");
    1.42 +        out.append("\n    c.constructor = CLS;");
    1.43 +        out.append("\n    c.$instOf_").append(className).append(" = true;");
    1.44          for (String superInterface : jc.getSuperInterfaces()) {
    1.45 -            out.append("\n    p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.46 +            out.append("\n    c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.47          }
    1.48          out.append("\n  }");
    1.49          out.append("\n  if (arguments.length === 0) {");