rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
branchclosure
changeset 1489 8d0fc428ff72
parent 1143 22beb858e00a
child 1491 4a1398eff4fb
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri May 24 16:45:32 2013 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sat Apr 26 19:13:56 2014 +0200
     1.3 @@ -433,14 +433,24 @@
     1.4                  + "    for (var i = 0; i < extensions.length; ++i) {\n"
     1.5                  + "      extensions[i](vm);\n"
     1.6                  + "    }\n"
     1.7 +                + "    var knownExtensions = extensions.length;\n"
     1.8                  + "    var loader = {};\n"
     1.9                  + "    loader.vm = vm;\n"
    1.10                  + "    loader.loadClass = function(name) {\n"
    1.11                  + "      var attr = name.replace__Ljava_lang_String_2CC('.','_');\n"
    1.12                  + "      var fn = vm[attr];\n"
    1.13                  + "      if (fn) return fn(false);\n"
    1.14 -                + "      return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
    1.15 -                + "        load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
    1.16 +                + "      try {\n"
    1.17 +                + "        return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
    1.18 +                + "          load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
    1.19 +                + "      } catch (err) {\n"
    1.20 +                + "        while (knownExtensions < extensions.length) {\n"
    1.21 +                + "          extensions[knownExtensions++](vm);\n"
    1.22 +                + "        }\n"
    1.23 +                + "        fn = vm[attr];\n"
    1.24 +                + "        if (fn) return fn(false);\n"
    1.25 +                + "        throw err;\n"
    1.26 +                + "      }\n"
    1.27                  + "    }\n"
    1.28                  + "    if (vm.loadClass) {\n"
    1.29                  + "      throw 'Cannot initialize the bck2brwsr VM twice!';\n"
    1.30 @@ -456,9 +466,9 @@
    1.31                  + "    return loader;\n"
    1.32                  + "  };\n");
    1.33              out.append(
    1.34 -                  "  global.bck2brwsr.registerExtension"
    1.35 -                             + " = function(extension) {\n"
    1.36 +                  "  global.bck2brwsr.registerExtension = function(extension) {\n"
    1.37                  + "    extensions.push(extension);\n"
    1.38 +                + "    return null;\n"
    1.39                  + "  };\n");
    1.40              out.append("}(this));");
    1.41          }