# HG changeset patch # User Jaroslav Tulach # Date 1354058757 -3600 # Node ID ffb067aae3a9297422c1078d9b14518126305a76 # Parent 66b552a2e108d8c73d46cf5930be93e68dcfb77b Lazy evaluation can execute simple static method diff -r 66b552a2e108 -r ffb067aae3a9 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Nov 27 23:21:22 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Nov 28 00:25:57 2012 +0100 @@ -74,7 +74,8 @@ } StringArray toInitilize = new StringArray(); final String className = className(jc); - out.append("\n\nfunction ").append(className).append("() {"); + out.append("\n\n").append(className); + out.append(" = function() {"); out.append("\n if (!").append(className). append(".prototype.$instOf_").append(className).append(") {"); for (FieldData v : jc.getFields()) { diff -r 66b552a2e108 -r ffb067aae3a9 vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Tue Nov 27 23:21:22 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Wed Nov 28 00:25:57 2012 +0100 @@ -60,11 +60,12 @@ sb.append("\n var script = org_apidesign_vm4brwsr_VMLazy(true).toJavaScriptLjava_lang_StringAB(loader.get(res + '.class'));"); sb.append("\n try {"); sb.append("\n new Function("); - sb.append("\n 'arguments[0][arguments[1]]=new lazyVM.prototype.Identity(' + script + ').call'"); + sb.append("\n 'arguments[0][arguments[1]]=' + script + ';'"); sb.append("\n )(self, name);"); sb.append("\n } catch (ex) {"); sb.append("\n throw 'Cannot compile ' + res + ' error: ' + ex + ' script:\\n' + script;"); sb.append("\n };"); + sb.append("\n return self[name](true);"); sb.append("\n };"); sb.append("\n"); sb.append("\n}\n"); @@ -79,7 +80,7 @@ @Test public void invokeStaticMethod() throws Exception { assertExec("Trying to get -1", "test", Double.valueOf(-1), - "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOne" + "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI" ); }