emul.zip needs to initialize ClassPath dynamically
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 26 Apr 2016 08:35:46 +0200
changeset 19434b4f9dbc807b
parent 1942 f8cc2a015ece
child 1944 644d4f4bc6e0
emul.zip needs to initialize ClassPath dynamically
rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/ManifestInputStream.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
     1.1 --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/ManifestInputStream.java	Tue Apr 26 08:05:09 2016 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/ManifestInputStream.java	Tue Apr 26 08:35:46 2016 +0200
     1.3 @@ -27,6 +27,7 @@
     1.4  import java.io.FilterInputStream;
     1.5  import java.io.IOException;
     1.6  import java.io.InputStream;
     1.7 +import org.apidesign.bck2brwsr.core.Exported;
     1.8  
     1.9  /*
    1.10   * A fast buffered input stream for parsing manifest files.
    1.11 @@ -34,6 +35,7 @@
    1.12   * Taken from java.util.jar.Manifest.FastInputStream and modified to be
    1.13   * independent of other Manifest functionality.
    1.14   */
    1.15 +@Exported
    1.16  public abstract class ManifestInputStream extends FilterInputStream {
    1.17      private byte[] buf;
    1.18      private int count = 0;
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Tue Apr 26 08:05:09 2016 +0200
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Tue Apr 26 08:35:46 2016 +0200
     2.3 @@ -583,6 +583,7 @@
     2.4                  + "    vm['registerResource'] = null;\n"
     2.5                  + "    var knownExtensions = extensions.length;\n"
     2.6                  + "    var loader = {};\n"
     2.7 +                + "    var classPath;\n"
     2.8                  + "    var loadBytes = function(name, skip) {\n"
     2.9                  + "      skip = typeof skip == 'number' ? skip : 0;\n"
    2.10                  + "      var arr = resources[name];\n"
    2.11 @@ -602,10 +603,21 @@
    2.12                  + "          args[i] = null;\n"
    2.13                  + "        } else if (typeof at === 'function') ret = at(name, skip);\n"
    2.14                  + "        else {\n"
    2.15 -                + "          var cp = vm['org_apidesign_vm4brwsr_ClassPath'];\n"
    2.16 -                + "          if (!cp) throw 'Core Java library not registered. Cannot load from ' + at;\n"
    2.17 -                + "          ret = cp(false).\n"
    2.18 -                + "            loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2II(name, args, i, skip);\n"
    2.19 +                + "          if (classPath === undefined) {\n"
    2.20 +                + "             classPath = null;\n"
    2.21 +                + "             try {\n"
    2.22 +                + "               classPath = vm.loadClass('org.apidesign.vm4brwsr.ClassPath');\n"
    2.23 +                + "             } catch (err) {\n"
    2.24 +                + "             }\n"
    2.25 +                + "           }\n"
    2.26 +                + "          if (!classPath) {\n"
    2.27 +                + "            if (name !== 'org/apidesign/vm4brwsr/ClassPath.class') {\n"
    2.28 +                + "              throw 'Core Java library not registered. Cannot load from ' + at;\n"
    2.29 +                + "            }\n"
    2.30 +                + "            ret = null;\n"
    2.31 +                + "          } else {\n"
    2.32 +                + "            ret = classPath['loadBytes___3BLjava_lang_String_2Ljava_lang_Object_2II'](name, args, i, skip);\n"
    2.33 +                + "          }\n"
    2.34                  + "        }\n"
    2.35                  + "        if (ret) return ret;\n"
    2.36                  + "      }\n"