# HG changeset patch # User Jaroslav Tulach # Date 1400096984 -7200 # Node ID 9e6b613a00ed8b04a5bac85e4310aa7e07a05131 # Parent 042d0f256e9557d2a2cc6f139b4e82260bf5f203 loadClass is loadBytes+reload diff -r 042d0f256e95 -r 9e6b613a00ed rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:24:24 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 14 21:49:44 2014 +0200 @@ -249,47 +249,6 @@ } } } -/* - append( - " return vm;\n" - + " };\n" - + " function mangleClass(name) {\n" - + " return name.replace__Ljava_lang_String_2Ljava_lang_CharSequence_2Ljava_lang_CharSequence_2(\n" - + " '_', '_1').replace__Ljava_lang_String_2CC('.','_');\n" - + " };\n" - + " global.bck2brwsr = function() {\n" - + " var args = Array.prototype.slice.apply(arguments);\n" - + " var vm = fillInVMSkeleton({});\n" - + " var loader = {};\n" - + " loader.vm = vm;\n" - + " loader.loadClass = function(name) {\n" - + " var attr = mangleClass(name);\n" - + " var fn = vm[attr];\n" - + " if (fn) return fn(false);\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" - + " }\n" - + " if (vm.loadClass) {\n" - + " throw 'Cannot initialize the bck2brwsr VM twice!';\n" - + " }\n" - + " vm.loadClass = loader.loadClass;\n" - + " vm._reload = function(name, byteCode) {;\n" - + " var attr = mangleClass(name);\n" - + " delete vm[attr];\n" - + " 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" - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n" - + " loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, name, args, typeof skip == 'number' ? skip : 0);\n" - + " }\n" - + " vm.java_lang_reflect_Array(false);\n" - + " vm.org_apidesign_vm4brwsr_VMLazy(false).\n" - + " loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, null, args, 0);\n" - + " return loader;\n" - + " };\n"); - append("}(this));"); -*/ } private static void readResource(InputStream emul, Appendable out) throws IOException { @@ -547,37 +506,35 @@ + " var arr = resources[name];\n" + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n" + " }\n" + + " var reload = function(name, arr, keep) {;\n" + + " if (!keep) {\n" + + " var attr = mangleClass(name);\n" + + " delete vm[attr];\n" + + " }\n" + + " return vm['org_apidesign_vm4brwsr_VMLazy'](false)\n" + + " ['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n" + + " (loader, name, args, arr);\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_3B(loader, name, args, arr);\n" + + " return reload(name, arr, true);\n" + " } catch (err) {\n" - + " while (knownExtensions < extensions.length) {\n" - + " vm['registerResource'] = registerResource;\n" - + " extensions[knownExtensions++](vm);\n" - + " vm['registerResource'] = null;\n" - + " }\n" + " fn = vm[attr];\n" + " if (fn) return fn(false);\n" + " throw err;\n" + " }\n" + " }\n" - + " if (vm.loadClass) {\n" + + " if (vm['loadClass']) {\n" + " throw 'Cannot initialize the bck2brwsr VM twice!';\n" + " }\n" - + " vm.loadClass = loader.loadClass;\n" - + " vm._reload = function(name, byteCode) {;\n" - + " var attr = mangleClass(name);\n" - + " delete vm[attr];\n" - + " 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 = loadBytes;\n" - + " vm.java_lang_reflect_Array(false);\n" + + " vm['loadClass'] = loader.loadClass;\n" + + " vm['_reload'] = reload;\n" + + " vm['loadBytes'] = loadBytes;\n" + + " vm['java_lang_reflect_Array'](false);\n" + " return loader;\n" + " };\n"); append( diff -r 042d0f256e95 -r 9e6b613a00ed rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:24:24 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java Wed May 14 21:49:44 2014 +0200 @@ -20,6 +20,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import org.apidesign.bck2brwsr.core.Exported; import org.apidesign.bck2brwsr.core.JavaScriptBody; /** @@ -38,6 +39,7 @@ static void init() { } + @Exported static Object load(Object loader, String name, Object[] arguments, byte[] arr) throws IOException, ClassNotFoundException { if (arr == null) { @@ -46,12 +48,8 @@ return new VMLazy(loader, arguments).defineClass(arr, name, false); } - static Object reload(Object loader, String name, Object[] arguments, byte[] arr) - throws IOException, ClassNotFoundException { - return new VMLazy(loader, arguments).defineClass(arr, name, false); - } - - private Object load(String name, boolean instance) + @Exported + Object load(String name, boolean instance) throws IOException, ClassNotFoundException { String res = name.replace('.', '/') + ".class"; byte[] arr = ClassPath.loadBytes(res, args, 0);