1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 16:09:03 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:24:24 2014 +0200
1.3 @@ -526,13 +526,35 @@
1.4 + " var knownExtensions = extensions.length;\n"
1.5 + " var loader = {};\n"
1.6 + " loader.vm = vm;\n"
1.7 + + " var loadBytes = function(name, skip) {\n"
1.8 + + " skip = typeof skip == 'number' ? skip : 0;\n"
1.9 + + " var arr = resources[name];\n"
1.10 + + " if (arr) {\n"
1.11 + + " var arrSize = arr.length;\n"
1.12 + + " if (skip < arrSize) return arr[skip];\n"
1.13 + + " skip -= arrSize;\n"
1.14 + + " } else {\n"
1.15 + + " var arrSize = 0;\n"
1.16 + + " };\n"
1.17 + + " var ret = vm['org_apidesign_vm4brwsr_ClassPath'](false).\n"
1.18 + + " loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2I(name, args, skip);\n"
1.19 + + " if (ret !== null) return ret;\n"
1.20 + + " while (knownExtensions < extensions.length) {\n"
1.21 + + " vm['registerResource'] = registerResource;\n"
1.22 + + " extensions[knownExtensions++](vm);\n"
1.23 + + " vm['registerResource'] = null;\n"
1.24 + + " }\n"
1.25 + + " var arr = resources[name];\n"
1.26 + + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.27 + + " }\n"
1.28 + " loader.loadClass = function(name) {\n"
1.29 + " var attr = mangleClass(name);\n"
1.30 + " var fn = vm[attr];\n"
1.31 + " if (fn) return fn(false);\n"
1.32 + " try {\n"
1.33 + + " var arr = loadBytes(name.replace__Ljava_lang_String_2CC('.', '/') + '.class');\n"
1.34 + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.35 - + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
1.36 + + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, arr);\n"
1.37 + " } catch (err) {\n"
1.38 + " while (knownExtensions < extensions.length) {\n"
1.39 + " vm['registerResource'] = registerResource;\n"
1.40 @@ -554,27 +576,7 @@
1.41 + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.42 + " reload__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, byteCode);\n"
1.43 + " };\n"
1.44 - + " vm.loadBytes = function(name, skip) {\n"
1.45 - + " skip = typeof skip == 'number' ? skip : 0;\n"
1.46 - + " var arr = resources[name];\n"
1.47 - + " if (arr) {\n"
1.48 - + " var arrSize = arr.length;\n"
1.49 - + " if (skip < arrSize) return arr[skip];\n"
1.50 - + " skip -= arrSize;\n"
1.51 - + " } else {\n"
1.52 - + " var arrSize = 0;\n"
1.53 - + " };\n"
1.54 - + " var ret = vm['org_apidesign_vm4brwsr_ClassPath'](false).\n"
1.55 - + " loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2I(name, args, skip);\n"
1.56 - + " if (ret !== null) return ret;\n"
1.57 - + " while (knownExtensions < extensions.length) {\n"
1.58 - + " vm['registerResource'] = registerResource;\n"
1.59 - + " extensions[knownExtensions++](vm);\n"
1.60 - + " vm['registerResource'] = null;\n"
1.61 - + " }\n"
1.62 - + " var arr = resources[name];\n"
1.63 - + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.64 - + " }\n"
1.65 + + " vm.loadBytes = loadBytes;\n"
1.66 + " vm.java_lang_reflect_Array(false);\n"
1.67 + " return loader;\n"
1.68 + " };\n");
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 16:09:03 2014 +0200
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:24:24 2014 +0200
2.3 @@ -38,9 +38,12 @@
2.4 static void init() {
2.5 }
2.6
2.7 - static Object load(Object loader, String name, Object[] arguments)
2.8 + static Object load(Object loader, String name, Object[] arguments, byte[] arr)
2.9 throws IOException, ClassNotFoundException {
2.10 - return new VMLazy(loader, arguments).load(name, false);
2.11 + if (arr == null) {
2.12 + throw new ClassNotFoundException(name);
2.13 + }
2.14 + return new VMLazy(loader, arguments).defineClass(arr, name, false);
2.15 }
2.16
2.17 static Object reload(Object loader, String name, Object[] arguments, byte[] arr)