1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Thu Sep 20 09:29:42 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Thu Sep 20 10:26:59 2012 +0200
1.3 @@ -355,6 +355,20 @@
1.4 i += 2;
1.5 break;
1.6 }
1.7 + case bc_ifnonnull: {
1.8 + int indx = i + readIntArg(byteCodes, i);
1.9 + out.append("if (stack.pop()) { gt = " + indx);
1.10 + out.append("; continue; }");
1.11 + i += 2;
1.12 + break;
1.13 + }
1.14 + case bc_ifnull: {
1.15 + int indx = i + readIntArg(byteCodes, i);
1.16 + out.append("if (!stack.pop()) { gt = " + indx);
1.17 + out.append("; continue; }");
1.18 + i += 2;
1.19 + break;
1.20 + }
1.21 case bc_if_icmpne:
1.22 i = generateIf(byteCodes, i, "!=");
1.23 break;
1.24 @@ -494,12 +508,17 @@
1.25 sig.insert(firstPos, 'V');
1.26 continue;
1.27 case 'L':
1.28 - i = descriptor.indexOf(';', i);
1.29 + int next = descriptor.indexOf(';', i);
1.30 if (count) {
1.31 cnt++;
1.32 + sig.append(ch);
1.33 + sig.append(descriptor.substring(i, next).replace('/', '_'));
1.34 } else {
1.35 + sig.insert(firstPos, descriptor.substring(i, next).replace('/', '_'));
1.36 + sig.insert(firstPos, ch);
1.37 hasReturnType[0] = true;
1.38 }
1.39 + i = next + 1;
1.40 continue;
1.41 case '[':
1.42 //arrays++;
1.43 @@ -523,11 +542,11 @@
1.44 out.append("consV"); // NOI18N
1.45 } else {
1.46 out.append(m.getName());
1.47 - out.append(m.getReturnType());
1.48 + outType(m.getReturnType(), out);
1.49 }
1.50 List<Parameter> args = m.getParameters();
1.51 for (Parameter t : args) {
1.52 - out.append(t.getDescriptor());
1.53 + outType(t.getDescriptor(), out);
1.54 }
1.55 return out.toString();
1.56 }
1.57 @@ -611,4 +630,13 @@
1.58 i += 2;
1.59 return i;
1.60 }
1.61 +
1.62 + private void outType(final String d, StringBuilder out) {
1.63 + if (d.charAt(0) == 'L') {
1.64 + assert d.charAt(d.length() - 1) == ';';
1.65 + out.append(d.replace('/', '_').substring(0, d.length() - 1));
1.66 + } else {
1.67 + out.append(d);
1.68 + }
1.69 + }
1.70 }