1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Feb 07 13:41:56 2013 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon Feb 11 19:55:00 2013 +0100
1.3 @@ -48,8 +48,7 @@
1.4 new VM(out).doCompile(l, names);
1.5 }
1.6 protected void doCompile(Bck2Brwsr.Resources l, StringArray names) throws IOException {
1.7 - out.append("(function VM(global) {");
1.8 - out.append("\n var vm = {};");
1.9 + out.append("(function VM(global) {var fillInVMSkeleton = function(vm) {");
1.10 StringArray processed = new StringArray();
1.11 StringArray initCode = new StringArray();
1.12 for (String baseClass : names.toArray()) {
1.13 @@ -117,8 +116,11 @@
1.14 }
1.15 }
1.16 out.append(
1.17 - " global.bck2brwsr = function() {\n"
1.18 + " return vm;\n"
1.19 + + " };\n"
1.20 + + " global.bck2brwsr = function() {\n"
1.21 + " var args = arguments;\n"
1.22 + + " var vm = fillInVMSkeleton({});\n"
1.23 + " var loader = {};\n"
1.24 + " var init = null;\n"
1.25 + " loader.vm = vm;\n"
1.26 @@ -137,6 +139,9 @@
1.27 + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
1.28 + " }\n"
1.29 + " if (args[0]) {\n"
1.30 + + " if (vm.loadClass) {\n"
1.31 + + " throw 'Cannot initialize the bck2brwsr VM twice!';\n"
1.32 + + " }\n"
1.33 + " vm.loadClass = loader.loadClass;\n"
1.34 + " vm.loadBytes = function(name) {\n"
1.35 + " if (!args[0]) throw 'bck2brwsr initialized without loader function, cannot load ' + name;\n"