rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
changeset 1942 f8cc2a015ece
parent 1937 2b13548b4ad2
child 1943 4b4f9dbc807b
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun Apr 24 15:09:40 2016 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Tue Apr 26 08:05:09 2016 +0200
     1.3 @@ -70,9 +70,7 @@
     1.4          String[] both = config.classes().toArray();
     1.5          
     1.6          final StringArray fixedNames = new StringArray();
     1.7 -        fixedNames.add(Object.class.getName().replace('.', '/'));
     1.8 -        fixedNames.add(Class.class.getName().replace('.', '/'));
     1.9 -        fixedNames.add(ArithmeticException.class.getName().replace('.', '/'));
    1.10 +        boolean addThree = false;
    1.11          
    1.12          VM vm;
    1.13          if (config.isExtension()) {
    1.14 @@ -81,15 +79,22 @@
    1.15                  config.getResources(), both, config.exported(),
    1.16                  config.allResources(), config.classpath()
    1.17              );
    1.18 +            addThree = true;
    1.19          } else {
    1.20              if (config.includeVM()) {
    1.21                  fixedNames.add(VM.class.getName().replace('.', '/'));
    1.22 +                addThree = true;
    1.23              }
    1.24              vm = new Standalone(out, 
    1.25                  config.getResources(), config.exported(),
    1.26                  config.allResources()
    1.27              );
    1.28          }            
    1.29 +        if (addThree) {
    1.30 +            fixedNames.add(Object.class.getName().replace('.', '/'));
    1.31 +            fixedNames.add(Class.class.getName().replace('.', '/'));
    1.32 +            fixedNames.add(ArithmeticException.class.getName().replace('.', '/'));
    1.33 +        }
    1.34          vm.doCompile(fixedNames.addAndNew(both));
    1.35      }
    1.36  
    1.37 @@ -615,14 +620,20 @@
    1.38                  + "    }\n"
    1.39                  + "    var reload = function(name, arr, keep) {\n"
    1.40                  + "      if (!arr) throw 'Cannot find ' + name;\n"
    1.41 -                + "      var lazy = vm['org_apidesign_vm4brwsr_VMLazy'];\n"
    1.42 -                + "      if (!lazy) throw 'No bck2brwsr VM module to compile ' + name;\n"
    1.43 +                + "      var err = null;\n"
    1.44 +                + "      try {\n"
    1.45 +                + "        var lazy = loadClass('org.apidesign.vm4brwsr.VMLazy');\n"
    1.46 +                + "      } catch (e) {\n"
    1.47 +                + "        err = e;\n"
    1.48 +                + "      }\n"
    1.49 +                + "      if (!lazy) {\n"
    1.50 +                + "         throw 'No bck2brwsr VM module to compile ' + name + ':\\n' + err;\n"
    1.51 +                + "      }\n"
    1.52                  + "      if (!keep) {\n"
    1.53                  + "        var attr = mangleClass(name);\n"
    1.54                  + "        delete vm[attr];\n"
    1.55                  + "      }\n"
    1.56 -                + "      return lazy(false)\n"
    1.57 -                + "        ['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n"
    1.58 +                + "      return lazy['load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2_3B']\n"
    1.59                  + "        (vm, name, args, arr);\n"
    1.60                  + "    };\n"
    1.61                  + "    var loadClass = function(name) {\n"
    1.62 @@ -791,6 +802,14 @@
    1.63          }
    1.64  
    1.65          @Override
    1.66 +        String accessClass(String className) {
    1.67 +            if (this.extensionClasses.contains(className.replace('_', '/'))) {
    1.68 +                return className;
    1.69 +            }
    1.70 +            return super.accessClass(className);
    1.71 +        }
    1.72 +
    1.73 +        @Override
    1.74          protected String generateClass(String className) throws IOException {
    1.75              if (isExternalClass(className)) {
    1.76                  final String cls = className.replace("_", "_1").replace('/', '_');