1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Mon Dec 17 09:21:55 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Thu Dec 20 21:39:16 2012 +0100
1.3 @@ -61,10 +61,27 @@
1.4 StringBuilder out = new StringBuilder();
1.5 out.append("var loader = arguments[0];\n");
1.6 out.append("var vm = loader.vm;\n");
1.7 - new Gen(this, out).compile(new ByteArrayInputStream(arr));
1.8 + int prelude = out.length();
1.9 + String initCode = new Gen(this, out).compile(new ByteArrayInputStream(arr));
1.10 String code = out.toString().toString();
1.11 +// dump("Loading " + name);
1.12 + dump(code);
1.13 String under = name.replace('.', '_');
1.14 - return applyCode(loader, under, code, instance);
1.15 + Object fn = applyCode(loader, under, code, instance);
1.16 +
1.17 + if (!initCode.isEmpty()) {
1.18 + out.setLength(prelude);
1.19 + out.append(initCode);
1.20 + code = out.toString().toString();
1.21 + dump(code);
1.22 + applyCode(loader, null, code, false);
1.23 + }
1.24 +
1.25 + return fn;
1.26 + }
1.27 +
1.28 +// @JavaScriptBody(args = "s", body = "java.lang.System.out.println(s.toString());")
1.29 + static void dump(String s) {
1.30 }
1.31
1.32 /* possibly not needed:
1.33 @@ -82,7 +99,7 @@
1.34 "} catch (ex) {\n" +
1.35 " throw 'Cannot compile ' + ex + ' line: ' + ex.lineNumber + ' script:\\n' + script;\n" +
1.36 "}\n" +
1.37 - "return vm[name](instance);\n"
1.38 + "return name != null ? vm[name](instance) : null;\n"
1.39 )
1.40 private static native Object applyCode(Object loader, String name, String script, boolean instance);
1.41