rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 1923 4185cdeeee7e
parent 1906 48053538940a
child 1930 9ca946fc4f01
     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);