1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:49:44 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Thu May 15 18:09:50 2014 +0200
1.3 @@ -28,11 +28,11 @@
1.4 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.5 */
1.6 final class VMLazy {
1.7 - private final Object loader;
1.8 + private final Object vm;
1.9 private final Object[] args;
1.10
1.11 - private VMLazy(Object loader, Object[] args) {
1.12 - this.loader = loader;
1.13 + private VMLazy(Object vm, Object[] args) {
1.14 + this.vm = vm;
1.15 this.args = args;
1.16 }
1.17
1.18 @@ -62,33 +62,32 @@
1.19
1.20 private Object defineClass(byte[] arr, String name, boolean instance) throws IOException {
1.21 StringBuilder out = new StringBuilder(65535);
1.22 - out.append("var loader = arguments[0];\n");
1.23 - out.append("var vm = loader.vm;\n");
1.24 + out.append("var vm = arguments[0];\n");
1.25 int prelude = out.length();
1.26 String initCode = new Gen(this, out).compile(new ByteArrayInputStream(arr));
1.27 String code = out.toString().toString();
1.28 String under = name.replace('.', '_');
1.29 - Object fn = applyCode(loader, under, code, instance);
1.30 + Object fn = applyCode(vm, under, code, instance);
1.31
1.32 if (!initCode.isEmpty()) {
1.33 out.setLength(prelude);
1.34 out.append(initCode);
1.35 code = out.toString().toString();
1.36 - applyCode(loader, null, code, false);
1.37 + applyCode(vm, null, code, false);
1.38 }
1.39
1.40 return fn;
1.41 }
1.42
1.43 - @JavaScriptBody(args = {"loader", "name", "script", "instance" }, body =
1.44 + @JavaScriptBody(args = {"vm", "name", "script", "instance" }, body =
1.45 "try {\n" +
1.46 - " new Function(script)(loader, name);\n" +
1.47 + " new Function(script)(vm, name);\n" +
1.48 "} catch (ex) {\n" +
1.49 " throw 'Cannot compile ' + name + ' ' + ex + ' line: ' + ex.lineNumber + ' script:\\n' + script;\n" +
1.50 "}\n" +
1.51 "return name != null ? vm[name](instance) : null;\n"
1.52 )
1.53 - private static native Object applyCode(Object loader, String name, String script, boolean instance);
1.54 + private static native Object applyCode(Object vm, String name, String script, boolean instance);
1.55
1.56
1.57 private static final class Gen extends ByteCodeToJavaScript {
1.58 @@ -104,8 +103,7 @@
1.59 "var cls = n.replace__Ljava_lang_String_2CC('/','_').toString();"
1.60 + "\nvar dot = n.replace__Ljava_lang_String_2CC('/','.').toString();"
1.61 + "\nvar lazy = this._lazy();"
1.62 - + "\nvar loader = lazy._loader();"
1.63 - + "\nvar vm = loader.vm;"
1.64 + + "\nvar vm = lazy._vm();"
1.65 + "\nif (vm[cls]) return false;"
1.66 + "\nvm[cls] = function() {"
1.67 + "\n var instance = arguments.length == 0 || arguments[0] === true;"
1.68 @@ -123,7 +121,7 @@
1.69 resourcePath = "/" + resourcePath;
1.70 }
1.71 String code = readCode(resourcePath);
1.72 - applyCode(lazy.loader, null, code, false);
1.73 + applyCode(lazy.vm, null, code, false);
1.74 }
1.75
1.76 private String readCode(String resourcePath) throws IOException {