diff -r d0df418a5993 -r 81926ff11587 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 14:35:21 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu May 29 09:57:01 2014 +0200 @@ -98,10 +98,9 @@ "\n var invoker = {};"); generateBody(names); for (String invokerMethod: invokerMethods.toArray()) { - append("\n invoker." + invokerMethod + " = function(target) {" - + "\n return function() {" - + "\n return target['" + invokerMethod + "'].apply(target, arguments);" - + "\n };" + append("\n invoker." + invokerMethod + " = function() {" + + "\n var target = arguments[0];" + + "\n return target['" + invokerMethod + "'].apply(target, Array.prototype.slice.call(arguments, 1));" + "\n };" ); } @@ -366,9 +365,11 @@ @Override protected String accessVirtualMethod( - String object, - String mangledName, - String[] fieldInfoName) throws IOException { + String object, + String mangledName, + String[] fieldInfoName, + int params + ) throws IOException { final ClassData referencedClass = classDataCache.getClassData(fieldInfoName[0]); final MethodData method = @@ -382,17 +383,17 @@ || ((referencedClass.getAccessFlags() & ByteCodeParser.ACC_FINAL) != 0) || !isHierarchyExported(method))) { - return object + "." + mangledName; + return object + "." + mangledName + '('; } - return accessThroughInvoker(object, mangledName); + return accessThroughInvoker(object, mangledName, params > 1 ? "," : ""); } - private String accessThroughInvoker(String object, String mangledName) { + private String accessThroughInvoker(String object, String mangledName, String sep) { if (!invokerMethods.contains(mangledName)) { invokerMethods.add(mangledName); } - return "invoker." + mangledName + '(' + object + ')'; + return "invoker." + mangledName + '(' + object + sep; } private boolean isHierarchyExported(final MethodData methodData)