1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:16:21 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:29:21 2012 +0100
1.3 @@ -74,16 +74,7 @@
1.4 }
1.5 StringArray toInitilize = new StringArray();
1.6 final String className = className(jc);
1.7 - out.append("\nfunction ").append(className);
1.8 - out.append("() {");
1.9 - for (FieldData v : jc.getFields()) {
1.10 - if (!v.isStatic()) {
1.11 - out.append("\n this.fld_").
1.12 - append(v.getName()).append(initField(v));
1.13 - }
1.14 - }
1.15 - out.append("\n}");
1.16 - out.append("\n\nfunction ").append(className).append("_proto() {");
1.17 + out.append("\n\nfunction ").append(className).append("() {");
1.18 out.append("\n if (!").append(className).
1.19 append(".prototype.$instOf_").append(className).append(") {");
1.20 for (FieldData v : jc.getFields()) {
1.21 @@ -96,7 +87,7 @@
1.22 if (sc != null) {
1.23 out.append("\n var p = ").append(className)
1.24 .append(".prototype = ").
1.25 - append(sc.replace('/', '_')).append("_proto();");
1.26 + append(sc.replace('/', '_')).append("(true);");
1.27 } else {
1.28 out.append("\n var p = ").append(className).append(".prototype;");
1.29 }
1.30 @@ -112,9 +103,18 @@
1.31 out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
1.32 }
1.33 out.append("\n }");
1.34 + out.append("\n if (arguments.length === 0) {");
1.35 + for (FieldData v : jc.getFields()) {
1.36 + if (!v.isStatic()) {
1.37 + out.append("\n this.fld_").
1.38 + append(v.getName()).append(initField(v));
1.39 + }
1.40 + }
1.41 + out.append("\n return this;");
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();");
1.46 + out.append("\n").append(className).append("(true);");
1.47 StringBuilder sb = new StringBuilder();
1.48 for (String init : toInitilize.toArray()) {
1.49 sb.append("\n").append(init).append("();");
1.50 @@ -129,7 +129,7 @@
1.51 final String mn = findMethodName(m, argsCnt);
1.52 out.append(prefix).append(mn).append(" = function");
1.53 if (mn.equals("classV")) {
1.54 - toInitilize.add(className(jc) + "_proto()." + mn);
1.55 + toInitilize.add(className(jc) + "(true)." + mn);
1.56 }
1.57 out.append('(');
1.58 String space = "";