1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 21 23:42:24 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu May 22 10:48:09 2014 +0200
1.3 @@ -35,12 +35,6 @@
1.4 private final ExportedSymbols exportedSymbols;
1.5 private final StringArray invokerMethods;
1.6
1.7 - private static final Class<?> FIXED_DEPENDENCIES[] = {
1.8 - Class.class,
1.9 - ArithmeticException.class,
1.10 - VM.class
1.11 - };
1.12 -
1.13 private VM(Appendable out, Bck2Brwsr.Resources resources, StringArray explicitlyExported) {
1.14 super(out);
1.15 this.resources = resources;
1.16 @@ -69,17 +63,20 @@
1.17 ) throws IOException {
1.18 String[] both = config.classes().toArray();
1.19
1.20 - VM vm = config.isExtension() ?
1.21 - new Extension(out, config.getResources(), both, config.exported())
1.22 - :
1.23 - new Standalone(out, config.getResources(), config.exported());
1.24 -
1.25 final StringArray fixedNames = new StringArray();
1.26 -
1.27 - for (final Class<?> fixedClass: FIXED_DEPENDENCIES) {
1.28 - fixedNames.add(fixedClass.getName().replace('.', '/'));
1.29 - }
1.30 -
1.31 + fixedNames.add(Class.class.getName().replace('.', '/'));
1.32 + fixedNames.add(ArithmeticException.class.getName().replace('.', '/'));
1.33 +
1.34 + VM vm;
1.35 + if (config.isExtension()) {
1.36 + fixedNames.add(VM.class.getName().replace('.', '/'));
1.37 + vm = new Extension(out, config.getResources(), both, config.exported());
1.38 + } else {
1.39 + if (config.includeVM()) {
1.40 + fixedNames.add(VM.class.getName().replace('.', '/'));
1.41 + }
1.42 + vm = new Standalone(out, config.getResources(), config.exported());
1.43 + }
1.44 vm.doCompile(fixedNames.addAndNew(both), config.allResources());
1.45 }
1.46
1.47 @@ -490,6 +487,10 @@
1.48 + " else resources[n].push(arr);\n"
1.49 + " }\n"
1.50 + " var vm = fillInVMSkeleton({ 'registerResource' : registerResource });\n"
1.51 + + " function initVM() {\n"
1.52 + + " var clsArray = vm['java_lang_reflect_Array'];\n"
1.53 + + " if (clsArray) clsArray(false);\n"
1.54 + + " }\n"
1.55 + " for (var i = 0; i < extensions.length; ++i) {\n"
1.56 + " extensions[i](vm);\n"
1.57 + " }\n"
1.58 @@ -518,6 +519,7 @@
1.59 + " vm['registerResource'] = registerResource;\n"
1.60 + " extensions[knownExtensions++](vm);\n"
1.61 + " vm['registerResource'] = null;\n"
1.62 + + " initVM();\n"
1.63 + " }\n"
1.64 + " var arr = resources[name];\n"
1.65 + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.66 @@ -536,7 +538,7 @@
1.67 + " var fn = vm[attr];\n"
1.68 + " if (fn) return fn(false);\n"
1.69 + " try {\n"
1.70 - + " var arr = loadBytes(name.replace__Ljava_lang_String_2CC('.', '/') + '.class');\n"
1.71 + + " var arr = loadBytes(replaceAll(name, '.', '/') + '.class');\n"
1.72 + " return reload(name, arr, true);\n"
1.73 + " } catch (err) {\n"
1.74 + " fn = vm[attr];\n"
1.75 @@ -550,7 +552,7 @@
1.76 + " vm['loadClass'] = loader.loadClass;\n"
1.77 + " vm['_reload'] = reload;\n"
1.78 + " vm['loadBytes'] = loadBytes;\n"
1.79 - + " vm['java_lang_reflect_Array'](false);\n"
1.80 + + " initVM();\n"
1.81 + " return loader;\n"
1.82 + " };\n");
1.83 append(