# HG changeset patch # User Jaroslav Tulach # Date 1353958161 -3600 # Node ID 0256fac49ea529e86e0a93c815d11a0003e633e9 # Parent 590a8c98df30d7cadd00a2d3c424f5f3fdb00747 Merging new class and prototype methods. When asking for prototype one can add (true) argument diff -r 590a8c98df30 -r 0256fac49ea5 emul/src/main/java/java/lang/AbstractStringBuilder.java --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java Mon Nov 26 20:16:21 2012 +0100 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java Mon Nov 26 20:29:21 2012 +0100 @@ -602,7 +602,7 @@ */ @JavaScriptBody( args={ "self", "i" }, - body="return java_lang_AbstractStringBuilder_proto().appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" + body="return java_lang_AbstractStringBuilder(true).appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" ) public AbstractStringBuilder append(int i) { if (i == Integer.MIN_VALUE) { diff -r 590a8c98df30 -r 0256fac49ea5 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:16:21 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Nov 26 20:29:21 2012 +0100 @@ -74,16 +74,7 @@ } StringArray toInitilize = new StringArray(); final String className = className(jc); - out.append("\nfunction ").append(className); - out.append("() {"); - for (FieldData v : jc.getFields()) { - if (!v.isStatic()) { - out.append("\n this.fld_"). - append(v.getName()).append(initField(v)); - } - } - out.append("\n}"); - out.append("\n\nfunction ").append(className).append("_proto() {"); + out.append("\n\nfunction ").append(className).append("() {"); out.append("\n if (!").append(className). append(".prototype.$instOf_").append(className).append(") {"); for (FieldData v : jc.getFields()) { @@ -96,7 +87,7 @@ if (sc != null) { out.append("\n var p = ").append(className) .append(".prototype = "). - append(sc.replace('/', '_')).append("_proto();"); + append(sc.replace('/', '_')).append("(true);"); } else { out.append("\n var p = ").append(className).append(".prototype;"); } @@ -112,9 +103,18 @@ out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;"); } out.append("\n }"); + out.append("\n if (arguments.length === 0) {"); + for (FieldData v : jc.getFields()) { + if (!v.isStatic()) { + out.append("\n this.fld_"). + append(v.getName()).append(initField(v)); + } + } + out.append("\n return this;"); + out.append("\n }"); out.append("\n return new ").append(className).append(";"); out.append("\n}"); - out.append("\n").append(className).append("_proto();"); + out.append("\n").append(className).append("(true);"); StringBuilder sb = new StringBuilder(); for (String init : toInitilize.toArray()) { sb.append("\n").append(init).append("();"); @@ -129,7 +129,7 @@ final String mn = findMethodName(m, argsCnt); out.append(prefix).append(mn).append(" = function"); if (mn.equals("classV")) { - toInitilize.add(className(jc) + "_proto()." + mn); + toInitilize.add(className(jc) + "(true)." + mn); } out.append('('); String space = ""; diff -r 590a8c98df30 -r 0256fac49ea5 vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Mon Nov 26 20:16:21 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Mon Nov 26 20:29:21 2012 +0100 @@ -161,7 +161,7 @@ Object ret = null; try { - ret = code.invokeFunction(clazz.getName().replace('.', '_') + "_proto"); + ret = code.invokeFunction(clazz.getName().replace('.', '_'), true); ret = code.invokeMethod(ret, method, args); } catch (ScriptException ex) { fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); diff -r 590a8c98df30 -r 0256fac49ea5 vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Nov 26 20:16:21 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Nov 26 20:29:21 2012 +0100 @@ -262,7 +262,7 @@ ) throws Exception { Object ret = null; try { - ret = toRun.invokeFunction(clazz.getName().replace('.', '_') + "_proto"); + ret = toRun.invokeFunction(clazz.getName().replace('.', '_'), true); ret = toRun.invokeMethod(ret, method, args); } catch (ScriptException ex) { fail("Execution failed in\n" + dumpJS(theCode), ex); diff -r 590a8c98df30 -r 0256fac49ea5 vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Mon Nov 26 20:16:21 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Mon Nov 26 20:29:21 2012 +0100 @@ -41,7 +41,7 @@ Object ret; try { - ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_') + "_proto"); + ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_'), true); ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr); } catch (Exception ex) { File f = File.createTempFile("execution", ".js");