1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 09:07:48 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 10:47:18 2014 +0200
1.3 @@ -493,14 +493,28 @@
1.4 + " var at = pending.indexOf(ev.target);\n"
1.5 + " pending.splice(at, 1);\n"
1.6 + " if (pending.length === 0) {\n"
1.7 - + " for (var i = 0; i < pendingClasses.length; i += 2) {\n"
1.8 - + " var vm = pendingClasses[i];\n"
1.9 - + " var n = pendingClasses[i + 1];\n"
1.10 - + " vm.loadClass(n);\n"
1.11 + + " for (var i = 0; i < pendingClasses.length; i += 3) {\n"
1.12 + + " invokeMethod(pendingClasses[i], pendingClasses[i + 1], pendingClasses[i + 2]);\n"
1.13 + " }\n"
1.14 + " pendingClasses = [];\n"
1.15 + " }\n"
1.16 + " }\n"
1.17 + + " function invokeMethod(vm, n, args) {\n"
1.18 + + " var clazz = vm.loadClass(n);\n"
1.19 + + " if (args) {\n"
1.20 + + " var seek = args[0];\n"
1.21 + + " var prefix = seek.indexOf('__') == -1 ? seek + '__' : seek;\n"
1.22 + + " args = Array.prototype.slice.call(args, 1);\n"
1.23 + + " var found = '';\n"
1.24 + + " for (var m in clazz) {\n"
1.25 + + " if (m.indexOf(prefix) === 0) {\n"
1.26 + + " return clazz[m].apply(null, args);\n"
1.27 + + " }\n"
1.28 + + " found += m.toString() + '\\n'\n"
1.29 + + " }\n"
1.30 + + " throw 'Cannot find ' + seek + ' in ' + n + ' found:\\n' + found;\n"
1.31 + + " }\n"
1.32 + + " }\n"
1.33 + " function extensionError(ev) {\n"
1.34 + " console.log('error loading ' + ev.target.src);\n"
1.35 + " extensionLoaded(ev);\n"
1.36 @@ -611,14 +625,29 @@
1.37 + " loader.loadClass = function(name) {\n"
1.38 + " if (pending.length === 0) {\n"
1.39 + " try {\n"
1.40 - + " return loadClass(name);\n"
1.41 + + " var c = loadClass(name);\n"
1.42 + + " c['invoke'] = function() {\n"
1.43 + + " return invokeMethod(vm, name, arguments);\n"
1.44 + + " };\n"
1.45 + + " return c;\n"
1.46 + " } catch (err) {\n"
1.47 + " if (pending.length === 0) throw err;\n"
1.48 + " }\n"
1.49 + " }\n"
1.50 + " pendingClasses.push(vm);\n"
1.51 + " pendingClasses.push(name);\n"
1.52 - + " return null;\n"
1.53 + + " pendingClasses.push(null);\n"
1.54 + + " return {\n"
1.55 + + " 'invoke' : function() {\n"
1.56 + + " if (pending.length === 0) {\n"
1.57 + + " invokeMethod(vm, name, arguments);\n"
1.58 + + " return;\n"
1.59 + + " }\n"
1.60 + + " pendingClasses.push(vm);\n"
1.61 + + " pendingClasses.push(name);\n"
1.62 + + " pendingClasses.push(arguments);\n"
1.63 + + " }\n"
1.64 + + " };\n"
1.65 + " }\n"
1.66 + " return loader;\n"
1.67 + " };\n");