vm/src/main/java/org/apidesign/vm4brwsr/VM.java
branchemul
changeset 711 333326d65bf9
parent 702 fa42b3d8cbbc
child 729 1ee59fe94653
     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"