# HG changeset patch # User Jaroslav Tulach # Date 1400170190 -7200 # Node ID d009c6ca8ce11dd6331774cadfa7e96d3d658771 # Parent 9e6b613a00ed8b04a5bac85e4310aa7e07a05131 Don't expose vm to the users of externally visible loader diff -r 9e6b613a00ed -r d009c6ca8ce1 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:49:44 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu May 15 18:09:50 2014 +0200 @@ -484,7 +484,6 @@ + " vm['registerResource'] = null;\n" + " var knownExtensions = extensions.length;\n" + " var loader = {};\n" - + " loader.vm = vm;\n" + " var loadBytes = function(name, skip) {\n" + " skip = typeof skip == 'number' ? skip : 0;\n" + " var arr = resources[name];\n" @@ -513,7 +512,7 @@ + " }\n" + " return vm['org_apidesign_vm4brwsr_VMLazy'](false)\n" + " ['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n" - + " (loader, name, args, arr);\n" + + " (vm, name, args, arr);\n" + " };\n" + " loader.loadClass = function(name) {\n" + " var attr = mangleClass(name);\n" diff -r 9e6b613a00ed -r d009c6ca8ce1 rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:49:44 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Thu May 15 18:09:50 2014 +0200 @@ -28,11 +28,11 @@ * @author Jaroslav Tulach */ final class VMLazy { - private final Object loader; + private final Object vm; private final Object[] args; - private VMLazy(Object loader, Object[] args) { - this.loader = loader; + private VMLazy(Object vm, Object[] args) { + this.vm = vm; this.args = args; } @@ -62,33 +62,32 @@ private Object defineClass(byte[] arr, String name, boolean instance) throws IOException { StringBuilder out = new StringBuilder(65535); - out.append("var loader = arguments[0];\n"); - out.append("var vm = loader.vm;\n"); + out.append("var vm = arguments[0];\n"); int prelude = out.length(); String initCode = new Gen(this, out).compile(new ByteArrayInputStream(arr)); String code = out.toString().toString(); String under = name.replace('.', '_'); - Object fn = applyCode(loader, under, code, instance); + Object fn = applyCode(vm, under, code, instance); if (!initCode.isEmpty()) { out.setLength(prelude); out.append(initCode); code = out.toString().toString(); - applyCode(loader, null, code, false); + applyCode(vm, null, code, false); } return fn; } - @JavaScriptBody(args = {"loader", "name", "script", "instance" }, body = + @JavaScriptBody(args = {"vm", "name", "script", "instance" }, body = "try {\n" + - " new Function(script)(loader, name);\n" + + " new Function(script)(vm, name);\n" + "} catch (ex) {\n" + " throw 'Cannot compile ' + name + ' ' + ex + ' line: ' + ex.lineNumber + ' script:\\n' + script;\n" + "}\n" + "return name != null ? vm[name](instance) : null;\n" ) - private static native Object applyCode(Object loader, String name, String script, boolean instance); + private static native Object applyCode(Object vm, String name, String script, boolean instance); private static final class Gen extends ByteCodeToJavaScript { @@ -104,8 +103,7 @@ "var cls = n.replace__Ljava_lang_String_2CC('/','_').toString();" + "\nvar dot = n.replace__Ljava_lang_String_2CC('/','.').toString();" + "\nvar lazy = this._lazy();" - + "\nvar loader = lazy._loader();" - + "\nvar vm = loader.vm;" + + "\nvar vm = lazy._vm();" + "\nif (vm[cls]) return false;" + "\nvm[cls] = function() {" + "\n var instance = arguments.length == 0 || arguments[0] === true;" @@ -123,7 +121,7 @@ resourcePath = "/" + resourcePath; } String code = readCode(resourcePath); - applyCode(lazy.loader, null, code, false); + applyCode(lazy.vm, null, code, false); } private String readCode(String resourcePath) throws IOException {