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 }