diff -r 5186733b7e07 -r 752f48257d4a rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 09:07:48 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 10:47:18 2014 +0200 @@ -493,14 +493,28 @@ + " var at = pending.indexOf(ev.target);\n" + " pending.splice(at, 1);\n" + " if (pending.length === 0) {\n" - + " for (var i = 0; i < pendingClasses.length; i += 2) {\n" - + " var vm = pendingClasses[i];\n" - + " var n = pendingClasses[i + 1];\n" - + " vm.loadClass(n);\n" + + " for (var i = 0; i < pendingClasses.length; i += 3) {\n" + + " invokeMethod(pendingClasses[i], pendingClasses[i + 1], pendingClasses[i + 2]);\n" + " }\n" + " pendingClasses = [];\n" + " }\n" + " }\n" + + " function invokeMethod(vm, n, args) {\n" + + " var clazz = vm.loadClass(n);\n" + + " if (args) {\n" + + " var seek = args[0];\n" + + " var prefix = seek.indexOf('__') == -1 ? seek + '__' : seek;\n" + + " args = Array.prototype.slice.call(args, 1);\n" + + " var found = '';\n" + + " for (var m in clazz) {\n" + + " if (m.indexOf(prefix) === 0) {\n" + + " return clazz[m].apply(null, args);\n" + + " }\n" + + " found += m.toString() + '\\n'\n" + + " }\n" + + " throw 'Cannot find ' + seek + ' in ' + n + ' found:\\n' + found;\n" + + " }\n" + + " }\n" + " function extensionError(ev) {\n" + " console.log('error loading ' + ev.target.src);\n" + " extensionLoaded(ev);\n" @@ -611,14 +625,29 @@ + " loader.loadClass = function(name) {\n" + " if (pending.length === 0) {\n" + " try {\n" - + " return loadClass(name);\n" + + " var c = loadClass(name);\n" + + " c['invoke'] = function() {\n" + + " return invokeMethod(vm, name, arguments);\n" + + " };\n" + + " return c;\n" + " } catch (err) {\n" + " if (pending.length === 0) throw err;\n" + " }\n" + " }\n" + " pendingClasses.push(vm);\n" + " pendingClasses.push(name);\n" - + " return null;\n" + + " pendingClasses.push(null);\n" + + " return {\n" + + " 'invoke' : function() {\n" + + " if (pending.length === 0) {\n" + + " invokeMethod(vm, name, arguments);\n" + + " return;\n" + + " }\n" + + " pendingClasses.push(vm);\n" + + " pendingClasses.push(name);\n" + + " pendingClasses.push(arguments);\n" + + " }\n" + + " };\n" + " }\n" + " return loader;\n" + " };\n");