Merging new class and prototype methods. When asking for prototype one can add (true) argument lazy
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 26 Nov 2012 20:29:21 +0100
branchlazy
changeset 2050256fac49ea5
parent 204 590a8c98df30
child 206 84920274cb32
Merging new class and prototype methods. When asking for prototype one can add (true) argument
emul/src/main/java/java/lang/AbstractStringBuilder.java
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java
vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java
vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java
     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");