1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed May 28 15:18:23 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 29 09:57:01 2014 +0200
1.3 @@ -96,10 +96,12 @@
1.4 }
1.5
1.6 protected String accessVirtualMethod(
1.7 - String object,
1.8 - String mangledName,
1.9 - String[] fieldInfoName) throws IOException {
1.10 - return object + "." + mangledName;
1.11 + String object,
1.12 + String mangledName,
1.13 + String[] fieldInfoName,
1.14 + int params
1.15 + ) throws IOException {
1.16 + return object + "." + mangledName + '(';
1.17 }
1.18
1.19 protected void declaredClass(ClassData classData, String mangledName)
1.20 @@ -1654,8 +1656,7 @@
1.21 .append(" = ");
1.22 }
1.23
1.24 - append(accessVirtualMethod(vars[0].toString(), mn, mi));
1.25 - append('(');
1.26 + append(accessVirtualMethod(vars[0].toString(), mn, mi, numArguments));
1.27 String sep = "";
1.28 for (int j = 1; j < numArguments; ++j) {
1.29 append(sep);
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Wed May 28 15:18:23 2014 +0200
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu May 29 09:57:01 2014 +0200
2.3 @@ -98,10 +98,9 @@
2.4 "\n var invoker = {};");
2.5 generateBody(names);
2.6 for (String invokerMethod: invokerMethods.toArray()) {
2.7 - append("\n invoker." + invokerMethod + " = function(target) {"
2.8 - + "\n return function() {"
2.9 - + "\n return target['" + invokerMethod + "'].apply(target, arguments);"
2.10 - + "\n };"
2.11 + append("\n invoker." + invokerMethod + " = function() {"
2.12 + + "\n var target = arguments[0];"
2.13 + + "\n return target['" + invokerMethod + "'].apply(target, Array.prototype.slice.call(arguments, 1));"
2.14 + "\n };"
2.15 );
2.16 }
2.17 @@ -366,9 +365,11 @@
2.18
2.19 @Override
2.20 protected String accessVirtualMethod(
2.21 - String object,
2.22 - String mangledName,
2.23 - String[] fieldInfoName) throws IOException {
2.24 + String object,
2.25 + String mangledName,
2.26 + String[] fieldInfoName,
2.27 + int params
2.28 + ) throws IOException {
2.29 final ClassData referencedClass =
2.30 classDataCache.getClassData(fieldInfoName[0]);
2.31 final MethodData method =
2.32 @@ -382,17 +383,17 @@
2.33 || ((referencedClass.getAccessFlags()
2.34 & ByteCodeParser.ACC_FINAL) != 0)
2.35 || !isHierarchyExported(method))) {
2.36 - return object + "." + mangledName;
2.37 + return object + "." + mangledName + '(';
2.38 }
2.39
2.40 - return accessThroughInvoker(object, mangledName);
2.41 + return accessThroughInvoker(object, mangledName, params > 1 ? "," : "");
2.42 }
2.43
2.44 - private String accessThroughInvoker(String object, String mangledName) {
2.45 + private String accessThroughInvoker(String object, String mangledName, String sep) {
2.46 if (!invokerMethods.contains(mangledName)) {
2.47 invokerMethods.add(mangledName);
2.48 }
2.49 - return "invoker." + mangledName + '(' + object + ')';
2.50 + return "invoker." + mangledName + '(' + object + sep;
2.51 }
2.52
2.53 private boolean isHierarchyExported(final MethodData methodData)