1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon May 26 16:20:51 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Tue May 27 12:25:41 2014 +0200
1.3 @@ -77,7 +77,7 @@
1.4 fixedNames.add(VM.class.getName().replace('.', '/'));
1.5 vm = new Extension(out,
1.6 config.getResources(), both, config.exported(),
1.7 - config.allResources()
1.8 + config.allResources(), config.classpath()
1.9 );
1.10 } else {
1.11 if (config.includeVM()) {
1.12 @@ -487,10 +487,9 @@
1.13 + " name = replaceAll(name, '.', '_');\n"
1.14 + " return name;\n"
1.15 + " };\n"
1.16 - + " global.bck2brwsr = function() {\n"
1.17 - + " var args = Array.prototype.slice.apply(arguments);\n"
1.18 - + " var resources = {};\n"
1.19 - + " function loadExtension(url) {\n"
1.20 + + " function loadExtension(url) {\n"
1.21 + + " if (url.substring(url.length - 4) == '.jar')\n"
1.22 + + " url = url.substring(0, url.length - 4) + '.js';\n"
1.23 + " var xhr = new XMLHttpRequest();\n"
1.24 + " xhr.open('GET', url, false);\n"
1.25 + " xhr.send();\n"
1.26 @@ -498,7 +497,10 @@
1.27 + " script.type = 'text/javascript';\n"
1.28 + " script.text = xhr.responseText;\n"
1.29 + " document.getElementsByTagName('head')[0].appendChild(script);\n"
1.30 - + " }\n"
1.31 + + " }\n"
1.32 + + " global.bck2brwsr = function() {\n"
1.33 + + " var args = Array.prototype.slice.apply(arguments);\n"
1.34 + + " var resources = {};\n"
1.35 + " function registerResource(n, a64) {\n"
1.36 + " var str = atob(a64);\n"
1.37 + " var arr = [];\n"
1.38 @@ -556,12 +558,15 @@
1.39 + " var arr = resources[name];\n"
1.40 + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.41 + " }\n"
1.42 - + " var reload = function(name, arr, keep) {;\n"
1.43 + + " var reload = function(name, arr, keep) {\n"
1.44 + + " if (!arr) throw 'Cannot find ' + name;\n"
1.45 + + " var lazy = vm['org_apidesign_vm4brwsr_VMLazy'];\n"
1.46 + + " if (!lazy) throw 'No bck2brwsr VM module to compile ' + name;\n"
1.47 + " if (!keep) {\n"
1.48 + " var attr = mangleClass(name);\n"
1.49 + " delete vm[attr];\n"
1.50 + " }\n"
1.51 - + " return vm['org_apidesign_vm4brwsr_VMLazy'](false)\n"
1.52 + + " return lazy(false)\n"
1.53 + " ['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n"
1.54 + " (vm, name, args, arr);\n"
1.55 + " };\n"
1.56 @@ -594,6 +599,10 @@
1.57 + " return false;\n"
1.58 + " }\n"
1.59 + " extensions.push(extension);\n"
1.60 + + " var cp = config['classpath'];\n"
1.61 + + " if (cp) for (var i = 0; i < cp.length; i++) {\n"
1.62 + + " loadExtension(cp[i]);\n"
1.63 + + " }\n"
1.64 + " return null;\n"
1.65 + " };\n");
1.66 append("}(this));");
1.67 @@ -612,21 +621,39 @@
1.68
1.69 private static final class Extension extends VM {
1.70 private final StringArray extensionClasses;
1.71 + private final StringArray classpath;
1.72
1.73 private Extension(Appendable out, Bck2Brwsr.Resources resources,
1.74 String[] extClassesArray, StringArray explicitlyExported,
1.75 - StringArray asBinary
1.76 + StringArray asBinary, StringArray classpath
1.77 ) {
1.78 super(out, resources, explicitlyExported, asBinary);
1.79 this.extensionClasses = StringArray.asList(extClassesArray);
1.80 + this.classpath = classpath;
1.81 }
1.82
1.83 @Override
1.84 protected void generatePrologue() throws IOException {
1.85 - append("bck2brwsr.register({\n"
1.86 - + "'magic' : 'kafíčko'\n"
1.87 - + "}, function(exports) {\n"
1.88 - + " var vm = {};\n");
1.89 + append(
1.90 + "bck2brwsr.register({\n"
1.91 + + " 'magic' : 'kafíčko'"
1.92 + );
1.93 + if (classpath != null && classpath.toArray().length > 0) {
1.94 + append(
1.95 + ",\n 'classpath' : [\n"
1.96 + );
1.97 + String sep = " ";
1.98 + for (String s : classpath.toArray()) {
1.99 + append(sep).append("'").append(s).append("'");
1.100 + sep = ",\n ";
1.101 + }
1.102 + append(
1.103 + "\n ]"
1.104 + );
1.105 + }
1.106 + append(
1.107 + "\n}, function(exports) {\n"
1.108 + + " var vm = {};\n");
1.109 append(" function link(n) {\n"
1.110 + " return function() {\n"
1.111 + " var cls = n['replace__Ljava_lang_String_2CC']"