rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
changeset 1693 800cb3d9f3b0
parent 1613 81926ff11587
child 1704 2e69145b9feb
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Thu May 29 09:57:01 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun Sep 14 21:36:56 2014 +0200
     1.3 @@ -149,6 +149,8 @@
     1.4  
     1.5      protected abstract boolean isExternalClass(String className);
     1.6  
     1.7 +    protected abstract void lazyReference(Appendable out, String n) throws IOException;
     1.8 +    
     1.9      @Override
    1.10      protected final void declaredClass(ClassData classData, String mangledName)
    1.11              throws IOException {
    1.12 @@ -681,6 +683,19 @@
    1.13          protected boolean isExternalClass(String className) {
    1.14              return false;
    1.15          }
    1.16 +        
    1.17 +        @Override
    1.18 +        protected void lazyReference(Appendable out, String n) throws IOException {
    1.19 +            String cls = n.replace('/', '_');
    1.20 +            String dot = n.replace('/', '.');
    1.21 +
    1.22 +            out.append("\nvm.").append(cls).append(" = function() {");
    1.23 +            out.append("\n  var instance = arguments.length == 0 || arguments[0] === true;");
    1.24 +            out.append("\n  delete vm.").append(cls).append(";");
    1.25 +            out.append("\n  var c = vm.loadClass('").append(dot).append("');");
    1.26 +            out.append("\n  return vm.").append(cls).append("(instance);");
    1.27 +            out.append("\n}");
    1.28 +        }
    1.29      }
    1.30  
    1.31      private static final class Extension extends VM {
    1.32 @@ -761,17 +776,16 @@
    1.33          protected boolean isExternalClass(String className) {
    1.34              return !extensionClasses.contains(className);
    1.35          }
    1.36 -    }
    1.37 -    
    1.38 -    private static void lazyReference(Appendable out, String n) throws IOException {
    1.39 -        String cls = n.replace('/', '_');
    1.40 -        String dot = n.replace('/', '.');
    1.41          
    1.42 -        out.append("\nvm.").append(cls).append(" = function() {");
    1.43 -        out.append("\n  var instance = arguments.length == 0 || arguments[0] === true;");
    1.44 -        out.append("\n  delete vm.").append(cls).append(";");
    1.45 -        out.append("\n  var c = vm.loadClass('").append(dot).append("');");
    1.46 -        out.append("\n  return vm.").append(cls).append("(instance);");
    1.47 -        out.append("\n}");
    1.48 +        @Override
    1.49 +        protected void lazyReference(Appendable out, String n) throws IOException {
    1.50 +            String cls = n.replace('/', '_');
    1.51 +
    1.52 +            out.append("\nvm.").append(cls).append(" = function() {");
    1.53 +            out.append("\n  var instance = arguments.length == 0 || arguments[0] === true;");
    1.54 +            out.append("\n  delete vm.").append(cls).append(";");
    1.55 +            out.append("\n  return link('").append(n).append("')(instance);");
    1.56 +            out.append("\n}");
    1.57 +        }
    1.58      }
    1.59  }