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) {");