# HG changeset patch # User Jaroslav Tulach # Date 1400095464 -7200 # Node ID 042d0f256e9557d2a2cc6f139b4e82260bf5f203 # Parent 3e9bfed0d88e9b46608b0eb82601ae1ee7af52cf Read the byte array via loadBytes call diff -r 3e9bfed0d88e -r 042d0f256e95 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 16:09:03 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:24:24 2014 +0200 @@ -526,13 +526,35 @@ + " var knownExtensions = extensions.length;\n" + " var loader = {};\n" + " loader.vm = vm;\n" + + " var loadBytes = function(name, skip) {\n" + + " skip = typeof skip == 'number' ? skip : 0;\n" + + " var arr = resources[name];\n" + + " if (arr) {\n" + + " var arrSize = arr.length;\n" + + " if (skip < arrSize) return arr[skip];\n" + + " skip -= arrSize;\n" + + " } else {\n" + + " var arrSize = 0;\n" + + " };\n" + + " var ret = vm['org_apidesign_vm4brwsr_ClassPath'](false).\n" + + " loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2I(name, args, skip);\n" + + " if (ret !== null) return ret;\n" + + " while (knownExtensions < extensions.length) {\n" + + " vm['registerResource'] = registerResource;\n" + + " extensions[knownExtensions++](vm);\n" + + " vm['registerResource'] = null;\n" + + " }\n" + + " var arr = resources[name];\n" + + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n" + + " }\n" + " loader.loadClass = function(name) {\n" + " var attr = mangleClass(name);\n" + " var fn = vm[attr];\n" + " if (fn) return fn(false);\n" + " try {\n" + + " var arr = loadBytes(name.replace__Ljava_lang_String_2CC('.', '/') + '.class');\n" + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n" - + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n" + + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, arr);\n" + " } catch (err) {\n" + " while (knownExtensions < extensions.length) {\n" + " vm['registerResource'] = registerResource;\n" @@ -554,27 +576,7 @@ + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n" + " reload__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B(loader, name, args, byteCode);\n" + " };\n" - + " vm.loadBytes = function(name, skip) {\n" - + " skip = typeof skip == 'number' ? skip : 0;\n" - + " var arr = resources[name];\n" - + " if (arr) {\n" - + " var arrSize = arr.length;\n" - + " if (skip < arrSize) return arr[skip];\n" - + " skip -= arrSize;\n" - + " } else {\n" - + " var arrSize = 0;\n" - + " };\n" - + " var ret = vm['org_apidesign_vm4brwsr_ClassPath'](false).\n" - + " loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2I(name, args, skip);\n" - + " if (ret !== null) return ret;\n" - + " while (knownExtensions < extensions.length) {\n" - + " vm['registerResource'] = registerResource;\n" - + " extensions[knownExtensions++](vm);\n" - + " vm['registerResource'] = null;\n" - + " }\n" - + " var arr = resources[name];\n" - + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n" - + " }\n" + + " vm.loadBytes = loadBytes;\n" + " vm.java_lang_reflect_Array(false);\n" + " return loader;\n" + " };\n"); diff -r 3e9bfed0d88e -r 042d0f256e95 rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 16:09:03 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:24:24 2014 +0200 @@ -38,9 +38,12 @@ static void init() { } - static Object load(Object loader, String name, Object[] arguments) + static Object load(Object loader, String name, Object[] arguments, byte[] arr) throws IOException, ClassNotFoundException { - return new VMLazy(loader, arguments).load(name, false); + if (arr == null) { + throw new ClassNotFoundException(name); + } + return new VMLazy(loader, arguments).defineClass(arr, name, false); } static Object reload(Object loader, String name, Object[] arguments, byte[] arr)