Merging new class and prototype methods. When asking for prototype one can add (true) argument
1.1 --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java Mon Nov 26 20:16:21 2012 +0100
1.2 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java Mon Nov 26 20:29:21 2012 +0100
1.3 @@ -602,7 +602,7 @@
1.4 */
1.5 @JavaScriptBody(
1.6 args={ "self", "i" },
1.7 - body="return java_lang_AbstractStringBuilder_proto().appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());"
1.8 + body="return java_lang_AbstractStringBuilder(true).appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());"
1.9 )
1.10 public AbstractStringBuilder append(int i) {
1.11 if (i == Integer.MIN_VALUE) {
2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:16:21 2012 +0100
2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:29:21 2012 +0100
2.3 @@ -74,16 +74,7 @@
2.4 }
2.5 StringArray toInitilize = new StringArray();
2.6 final String className = className(jc);
2.7 - out.append("\nfunction ").append(className);
2.8 - out.append("() {");
2.9 - for (FieldData v : jc.getFields()) {
2.10 - if (!v.isStatic()) {
2.11 - out.append("\n this.fld_").
2.12 - append(v.getName()).append(initField(v));
2.13 - }
2.14 - }
2.15 - out.append("\n}");
2.16 - out.append("\n\nfunction ").append(className).append("_proto() {");
2.17 + out.append("\n\nfunction ").append(className).append("() {");
2.18 out.append("\n if (!").append(className).
2.19 append(".prototype.$instOf_").append(className).append(") {");
2.20 for (FieldData v : jc.getFields()) {
2.21 @@ -96,7 +87,7 @@
2.22 if (sc != null) {
2.23 out.append("\n var p = ").append(className)
2.24 .append(".prototype = ").
2.25 - append(sc.replace('/', '_')).append("_proto();");
2.26 + append(sc.replace('/', '_')).append("(true);");
2.27 } else {
2.28 out.append("\n var p = ").append(className).append(".prototype;");
2.29 }
2.30 @@ -112,9 +103,18 @@
2.31 out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
2.32 }
2.33 out.append("\n }");
2.34 + out.append("\n if (arguments.length === 0) {");
2.35 + for (FieldData v : jc.getFields()) {
2.36 + if (!v.isStatic()) {
2.37 + out.append("\n this.fld_").
2.38 + append(v.getName()).append(initField(v));
2.39 + }
2.40 + }
2.41 + out.append("\n return this;");
2.42 + out.append("\n }");
2.43 out.append("\n return new ").append(className).append(";");
2.44 out.append("\n}");
2.45 - out.append("\n").append(className).append("_proto();");
2.46 + out.append("\n").append(className).append("(true);");
2.47 StringBuilder sb = new StringBuilder();
2.48 for (String init : toInitilize.toArray()) {
2.49 sb.append("\n").append(init).append("();");
2.50 @@ -129,7 +129,7 @@
2.51 final String mn = findMethodName(m, argsCnt);
2.52 out.append(prefix).append(mn).append(" = function");
2.53 if (mn.equals("classV")) {
2.54 - toInitilize.add(className(jc) + "_proto()." + mn);
2.55 + toInitilize.add(className(jc) + "(true)." + mn);
2.56 }
2.57 out.append('(');
2.58 String space = "";
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Mon Nov 26 20:16:21 2012 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Mon Nov 26 20:29:21 2012 +0100
3.3 @@ -161,7 +161,7 @@
3.4
3.5 Object ret = null;
3.6 try {
3.7 - ret = code.invokeFunction(clazz.getName().replace('.', '_') + "_proto");
3.8 + ret = code.invokeFunction(clazz.getName().replace('.', '_'), true);
3.9 ret = code.invokeMethod(ret, method, args);
3.10 } catch (ScriptException ex) {
3.11 fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Nov 26 20:16:21 2012 +0100
4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Nov 26 20:29:21 2012 +0100
4.3 @@ -262,7 +262,7 @@
4.4 ) throws Exception {
4.5 Object ret = null;
4.6 try {
4.7 - ret = toRun.invokeFunction(clazz.getName().replace('.', '_') + "_proto");
4.8 + ret = toRun.invokeFunction(clazz.getName().replace('.', '_'), true);
4.9 ret = toRun.invokeMethod(ret, method, args);
4.10 } catch (ScriptException ex) {
4.11 fail("Execution failed in\n" + dumpJS(theCode), ex);
5.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Mon Nov 26 20:16:21 2012 +0100
5.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Mon Nov 26 20:29:21 2012 +0100
5.3 @@ -41,7 +41,7 @@
5.4
5.5 Object ret;
5.6 try {
5.7 - ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_') + "_proto");
5.8 + ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_'), true);
5.9 ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr);
5.10 } catch (Exception ex) {
5.11 File f = File.createTempFile("execution", ".js");