Changing order, so the new <prototype> is done once, at the end of the function
1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 25 23:14:58 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:16:21 2012 +0100
1.3 @@ -84,10 +84,8 @@
1.4 }
1.5 out.append("\n}");
1.6 out.append("\n\nfunction ").append(className).append("_proto() {");
1.7 - out.append("\n if (").append(className).
1.8 + out.append("\n if (!").append(className).
1.9 append(".prototype.$instOf_").append(className).append(") {");
1.10 - out.append("\n return new ").append(className).append(";");
1.11 - out.append("\n }");
1.12 for (FieldData v : jc.getFields()) {
1.13 if (v.isStatic()) {
1.14 generateStaticField(v);
1.15 @@ -96,23 +94,24 @@
1.16 // ClassName sc = jc.getSuperClass();
1.17 String sc = jc.getSuperClassName(); // with _
1.18 if (sc != null) {
1.19 - out.append("\n var p = ").append(className)
1.20 + out.append("\n var p = ").append(className)
1.21 .append(".prototype = ").
1.22 append(sc.replace('/', '_')).append("_proto();");
1.23 } else {
1.24 - out.append("\n var p = ").append(className).append(".prototype;");
1.25 + out.append("\n var p = ").append(className).append(".prototype;");
1.26 }
1.27 for (MethodData m : jc.getMethods()) {
1.28 if (m.isStatic()) {
1.29 - generateStaticMethod("\n p.", m, toInitilize);
1.30 + generateStaticMethod("\n p.", m, toInitilize);
1.31 } else {
1.32 - generateInstanceMethod("\n p.", m);
1.33 + generateInstanceMethod("\n p.", m);
1.34 }
1.35 }
1.36 - out.append("\n p.$instOf_").append(className).append(" = true;");
1.37 + out.append("\n p.$instOf_").append(className).append(" = true;");
1.38 for (String superInterface : jc.getSuperInterfaces()) {
1.39 - out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
1.40 + out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
1.41 }
1.42 + out.append("\n }");
1.43 out.append("\n return new ").append(className).append(";");
1.44 out.append("\n}");
1.45 out.append("\n").append(className).append("_proto();");