1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Mar 22 02:51:04 2016 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Apr 17 13:16:31 2016 +0200
1.3 @@ -1997,7 +1997,7 @@
1.4 return mn;
1.5 }
1.6
1.7 - private static CharSequence mangleCallbacks(String pkgName, String body) {
1.8 + private CharSequence mangleCallbacks(String pkgName, String body) {
1.9 StringBuilder sb = new StringBuilder();
1.10 int pos = 0;
1.11 for (;;) {
1.12 @@ -2029,14 +2029,18 @@
1.13 String params = body.substring(sigBeg, sigEnd + 1);
1.14
1.15 int paramBeg = body.indexOf('(', sigEnd + 1);
1.16 -
1.17 + int paramEnd = closingParenthesis(body, paramBeg);
1.18 +
1.19 + sb.append(accessClass("java_lang_Class")).append("(false).toJS(");
1.20 sb.append("vm.").append(mangleClassName(pkgName)).append("_$JsCallbacks$(false)._VM().");
1.21 sb.append(mangleJsCallbacks(fqn, method, params, false));
1.22 sb.append("(").append(refId);
1.23 if (body.charAt(paramBeg + 1) != ')') {
1.24 sb.append(",");
1.25 }
1.26 - pos = paramBeg + 1;
1.27 + sb.append(body.substring(paramBeg + 1, paramEnd));
1.28 + sb.append(")");
1.29 + pos = paramEnd;
1.30 }
1.31 sb = null;
1.32 pos = 0;
1.33 @@ -2066,11 +2070,15 @@
1.34 String params = body.substring(sigBeg, sigEnd + 1);
1.35
1.36 int paramBeg = body.indexOf('(', sigEnd + 1);
1.37 -
1.38 + int paramEnd = closingParenthesis(body, paramBeg);
1.39 +
1.40 + sb.append(accessClass("java_lang_Class")).append("(false).toJS(");
1.41 sb.append("vm.").append(mangleClassName(pkgName)).append("_$JsCallbacks$(false)._VM().");
1.42 sb.append(mangleJsCallbacks(fqn, method, params, true));
1.43 sb.append("(");
1.44 - pos = paramBeg + 1;
1.45 + sb.append(body.substring(paramBeg + 1, paramEnd));
1.46 + sb.append(")");
1.47 + pos = paramEnd;
1.48 }
1.49 }
1.50
1.51 @@ -2449,6 +2457,19 @@
1.52 System.err.println(msg);
1.53 }
1.54
1.55 + private static int closingParenthesis(String body, int at) {
1.56 + int cnt = 0;
1.57 + for (;;) {
1.58 + switch (body.charAt(at++)) {
1.59 + case '(': cnt++; break;
1.60 + case ')': cnt--; break;
1.61 + }
1.62 + if (cnt == 0) {
1.63 + return at;
1.64 + }
1.65 + }
1.66 + }
1.67 +
1.68 private class GenerateAnno extends AnnotationParser {
1.69 public GenerateAnno(boolean textual, boolean iterateArray) {
1.70 super(textual, iterateArray);