# HG changeset patch # User Jaroslav Tulach # Date 1400395376 -7200 # Node ID cf0f746f1a7f3e5f2f063f0583c136e56c69a4f1 # Parent 315c740b8c86b11bd0d48b9773f36e6403828b2e Doing the initial classpath cycle in JavaScript to allow loading of the VM on demand diff -r 315c740b8c86 -r cf0f746f1a7f rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java Sun May 18 07:43:33 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java Sun May 18 08:42:56 2014 +0200 @@ -43,43 +43,50 @@ private static boolean doingToZip; - - @Exported static byte[] loadBytes(String resource, Object classpath, int skip) + static byte[] loadBytes(String resource, Object classpath, int skip) throws IOException, ClassNotFoundException { for (int i = 0; i < length(classpath); i++) { - Object c = at(classpath, i); - if (c instanceof String && !doingToZip) { - try { - doingToZip = true; - String url = (String)c; - final Bck2Brwsr.Resources z = toZip(url); - c = set(classpath, i, z); - final byte[] man = readBytes(z, "META-INF/MANIFEST.MF"); - if (man != null) { - String mainClass = processClassPathAttr(man, url, classpath); + byte[] arr = loadBytes(resource, classpath, i, skip); + if (arr != null) { + return arr; + } + } + return null; + } + @Exported static byte[] loadBytes(String resource, Object classpath, int i, int skip) + throws IOException, ClassNotFoundException { + Object c = at(classpath, i); + if (c instanceof String && !doingToZip) { + try { + doingToZip = true; + String url = (String)c; + final Bck2Brwsr.Resources z = toZip(url); + c = set(classpath, i, z); + final byte[] man = readBytes(z, "META-INF/MANIFEST.MF"); + if (man != null) { + String mainClass = processClassPathAttr(man, url, classpath); // if (mainClass != null) { // Class.forName(mainClass); // } - } - } catch (IOException ex) { - set(classpath, i, ex); - log("Cannot load " + c + " - " + ex.getClass().getName() + ":" + ex.getMessage()); - } finally { - doingToZip = false; } + } catch (IOException ex) { + set(classpath, i, ex); + log("Cannot load " + c + " - " + ex.getClass().getName() + ":" + ex.getMessage()); + } finally { + doingToZip = false; } - if (resource != null) { - byte[] checkRes; - if (c instanceof Bck2Brwsr.Resources) { - checkRes = readBytes((Bck2Brwsr.Resources)c, resource); - if (checkRes != null && --skip < 0) { - return checkRes; - } - } else { - checkRes = callFunction(c, resource, skip); - if (checkRes != null) { - return checkRes; - } + } + if (resource != null) { + byte[] checkRes; + if (c instanceof Bck2Brwsr.Resources) { + checkRes = readBytes((Bck2Brwsr.Resources)c, resource); + if (checkRes != null && --skip < 0) { + return checkRes; + } + } else { + checkRes = callFunction(c, resource, skip); + if (checkRes != null) { + return checkRes; } } } diff -r 315c740b8c86 -r cf0f746f1a7f rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sun May 18 07:43:33 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sun May 18 08:42:56 2014 +0200 @@ -506,9 +506,14 @@ + " } 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" + + " for (var i = 0; i < args.length; i++) {\n" + + " var at = args[i];\n" + + " var ret;\n" + + " if (typeof at === 'function') ret = at(name, skip);\n" + + " else ret = vm['org_apidesign_vm4brwsr_ClassPath'](false).\n" + + " loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2II(name, args, i, skip);\n" + + " if (ret !== null) return ret;\n" + + " }\n" + " while (knownExtensions < extensions.length) {\n" + " vm['registerResource'] = registerResource;\n" + " extensions[knownExtensions++](vm);\n"