diff -r bb1e59f5cff3 -r 6193e735f4d1 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sat Oct 05 07:23:48 2013 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Fri Oct 11 09:58:03 2013 +0200 @@ -80,6 +80,7 @@ } InputStream is = loadClass(l, name); if (is == null) { + lazyReference(out, name); skipClass.add(name); continue; } @@ -250,4 +251,16 @@ String getVMObject() { return "vm"; } + + private static void lazyReference(Appendable out, String n) throws IOException { + String cls = n.replace('/', '_'); + String dot = n.replace('/', '.'); + + out.append("\nvm.").append(cls).append(" = function() {"); + out.append("\n var instance = arguments.length == 0 || arguments[0] === true;"); + out.append("\n delete vm.").append(cls).append(";"); + out.append("\n var c = vm.loadClass('").append(dot).append("');"); + out.append("\n return vm.").append(cls).append("(instance);"); + out.append("\n}"); + } }