Lazy evaluation can execute simple static method lazy
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 28 Nov 2012 00:25:57 +0100
branchlazy
changeset 211ffb067aae3a9
parent 210 66b552a2e108
child 212 597f96a8e998
Lazy evaluation can execute simple static method
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Nov 27 23:21:22 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Nov 28 00:25:57 2012 +0100
     1.3 @@ -74,7 +74,8 @@
     1.4          }
     1.5          StringArray toInitilize = new StringArray();
     1.6          final String className = className(jc);
     1.7 -        out.append("\n\nfunction ").append(className).append("() {");
     1.8 +        out.append("\n\n").append(className);
     1.9 +        out.append(" = function() {");
    1.10          out.append("\n  if (!").append(className).
    1.11              append(".prototype.$instOf_").append(className).append(") {");
    1.12          for (FieldData v : jc.getFields()) {
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java	Tue Nov 27 23:21:22 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java	Wed Nov 28 00:25:57 2012 +0100
     2.3 @@ -60,11 +60,12 @@
     2.4          sb.append("\n    var script = org_apidesign_vm4brwsr_VMLazy(true).toJavaScriptLjava_lang_StringAB(loader.get(res + '.class'));");
     2.5          sb.append("\n    try {");
     2.6          sb.append("\n      new Function(");
     2.7 -        sb.append("\n        'arguments[0][arguments[1]]=new lazyVM.prototype.Identity(' + script + ').call'");
     2.8 +        sb.append("\n        'arguments[0][arguments[1]]=' + script + ';'");
     2.9          sb.append("\n      )(self, name);");
    2.10          sb.append("\n    } catch (ex) {");
    2.11          sb.append("\n      throw 'Cannot compile ' + res + ' error: ' + ex + ' script:\\n' + script;");
    2.12          sb.append("\n    };");
    2.13 +        sb.append("\n    return self[name](true);");
    2.14          sb.append("\n  };");
    2.15          sb.append("\n");
    2.16          sb.append("\n}\n");
    2.17 @@ -79,7 +80,7 @@
    2.18      
    2.19      @Test public void invokeStaticMethod() throws Exception {
    2.20          assertExec("Trying to get -1", "test", Double.valueOf(-1),
    2.21 -            "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOne"
    2.22 +            "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI"
    2.23          );
    2.24      }
    2.25