1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:24:24 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:49:44 2014 +0200
1.3 @@ -249,47 +249,6 @@
1.4 }
1.5 }
1.6 }
1.7 -/*
1.8 - append(
1.9 - " return vm;\n"
1.10 - + " };\n"
1.11 - + " function mangleClass(name) {\n"
1.12 - + " return name.replace__Ljava_lang_String_2Ljava_lang_CharSequence_2Ljava_lang_CharSequence_2(\n"
1.13 - + " '_', '_1').replace__Ljava_lang_String_2CC('.','_');\n"
1.14 - + " };\n"
1.15 - + " global.bck2brwsr = function() {\n"
1.16 - + " var args = Array.prototype.slice.apply(arguments);\n"
1.17 - + " var vm = fillInVMSkeleton({});\n"
1.18 - + " var loader = {};\n"
1.19 - + " loader.vm = vm;\n"
1.20 - + " loader.loadClass = function(name) {\n"
1.21 - + " var attr = mangleClass(name);\n"
1.22 - + " var fn = vm[attr];\n"
1.23 - + " if (fn) return fn(false);\n"
1.24 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.25 - + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
1.26 - + " }\n"
1.27 - + " if (vm.loadClass) {\n"
1.28 - + " throw 'Cannot initialize the bck2brwsr VM twice!';\n"
1.29 - + " }\n"
1.30 - + " vm.loadClass = loader.loadClass;\n"
1.31 - + " vm._reload = function(name, byteCode) {;\n"
1.32 - + " var attr = mangleClass(name);\n"
1.33 - + " delete vm[attr];\n"
1.34 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.35 - + " reload__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, byteCode);\n"
1.36 - + " };\n"
1.37 - + " vm.loadBytes = function(name, skip) {\n"
1.38 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.39 - + " loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, name, args, typeof skip == 'number' ? skip : 0);\n"
1.40 - + " }\n"
1.41 - + " vm.java_lang_reflect_Array(false);\n"
1.42 - + " vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.43 - + " loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, null, args, 0);\n"
1.44 - + " return loader;\n"
1.45 - + " };\n");
1.46 - append("}(this));");
1.47 -*/
1.48 }
1.49
1.50 private static void readResource(InputStream emul, Appendable out) throws IOException {
1.51 @@ -547,37 +506,35 @@
1.52 + " var arr = resources[name];\n"
1.53 + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.54 + " }\n"
1.55 + + " var reload = function(name, arr, keep) {;\n"
1.56 + + " if (!keep) {\n"
1.57 + + " var attr = mangleClass(name);\n"
1.58 + + " delete vm[attr];\n"
1.59 + + " }\n"
1.60 + + " return vm['org_apidesign_vm4brwsr_VMLazy'](false)\n"
1.61 + + " ['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n"
1.62 + + " (loader, name, args, arr);\n"
1.63 + + " };\n"
1.64 + " loader.loadClass = function(name) {\n"
1.65 + " var attr = mangleClass(name);\n"
1.66 + " var fn = vm[attr];\n"
1.67 + " if (fn) return fn(false);\n"
1.68 + " try {\n"
1.69 + " var arr = loadBytes(name.replace__Ljava_lang_String_2CC('.', '/') + '.class');\n"
1.70 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.71 - + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, arr);\n"
1.72 + + " return reload(name, arr, true);\n"
1.73 + " } catch (err) {\n"
1.74 - + " while (knownExtensions < extensions.length) {\n"
1.75 - + " vm['registerResource'] = registerResource;\n"
1.76 - + " extensions[knownExtensions++](vm);\n"
1.77 - + " vm['registerResource'] = null;\n"
1.78 - + " }\n"
1.79 + " fn = vm[attr];\n"
1.80 + " if (fn) return fn(false);\n"
1.81 + " throw err;\n"
1.82 + " }\n"
1.83 + " }\n"
1.84 - + " if (vm.loadClass) {\n"
1.85 + + " if (vm['loadClass']) {\n"
1.86 + " throw 'Cannot initialize the bck2brwsr VM twice!';\n"
1.87 + " }\n"
1.88 - + " vm.loadClass = loader.loadClass;\n"
1.89 - + " vm._reload = function(name, byteCode) {;\n"
1.90 - + " var attr = mangleClass(name);\n"
1.91 - + " delete vm[attr];\n"
1.92 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.93 - + " reload__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, byteCode);\n"
1.94 - + " };\n"
1.95 - + " vm.loadBytes = loadBytes;\n"
1.96 - + " vm.java_lang_reflect_Array(false);\n"
1.97 + + " vm['loadClass'] = loader.loadClass;\n"
1.98 + + " vm['_reload'] = reload;\n"
1.99 + + " vm['loadBytes'] = loadBytes;\n"
1.100 + + " vm['java_lang_reflect_Array'](false);\n"
1.101 + " return loader;\n"
1.102 + " };\n");
1.103 append(
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:24:24 2014 +0200
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:49:44 2014 +0200
2.3 @@ -20,6 +20,7 @@
2.4 import java.io.ByteArrayInputStream;
2.5 import java.io.IOException;
2.6 import java.io.InputStream;
2.7 +import org.apidesign.bck2brwsr.core.Exported;
2.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.9
2.10 /**
2.11 @@ -38,6 +39,7 @@
2.12 static void init() {
2.13 }
2.14
2.15 + @Exported
2.16 static Object load(Object loader, String name, Object[] arguments, byte[] arr)
2.17 throws IOException, ClassNotFoundException {
2.18 if (arr == null) {
2.19 @@ -46,12 +48,8 @@
2.20 return new VMLazy(loader, arguments).defineClass(arr, name, false);
2.21 }
2.22
2.23 - static Object reload(Object loader, String name, Object[] arguments, byte[] arr)
2.24 - throws IOException, ClassNotFoundException {
2.25 - return new VMLazy(loader, arguments).defineClass(arr, name, false);
2.26 - }
2.27 -
2.28 - private Object load(String name, boolean instance)
2.29 + @Exported
2.30 + Object load(String name, boolean instance)
2.31 throws IOException, ClassNotFoundException {
2.32 String res = name.replace('.', '/') + ".class";
2.33 byte[] arr = ClassPath.loadBytes(res, args, 0);