# HG changeset patch # User Jaroslav Tulach # Date 1348586981 -7200 # Node ID 96e44a3f544db3885b59c721ebde05a22a157a83 # Parent 82476405e1ad8c489dc5af05d0cccd7b28e18130 Can we call a filter that takes an object array? diff -r 82476405e1ad -r 96e44a3f544d vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Sep 25 14:19:12 2012 +0200 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Sep 25 17:29:41 2012 +0200 @@ -687,7 +687,7 @@ sig.insert(firstPos, descriptor.substring(i, next).replace('/', '_')); sig.insert(firstPos, ch); if (array) { - sig.append('A'); + sig.insert(firstPos, 'A'); } hasReturnType[0] = true; } @@ -717,11 +717,11 @@ tmp.append("classV"); // NOI18N } else { tmp.append(m.getName()); - outType(findDescriptor(m.getReturnType()), tmp); + outType(m.getReturnType(), tmp); } List args = m.getParameters(); for (Parameter t : args) { - outType(findDescriptor(t.getDescriptor()), tmp); + outType(t.getDescriptor(), tmp); } return tmp.toString(); } @@ -814,7 +814,12 @@ } } - private void outType(final String d, StringBuilder out) { + private void outType(String d, StringBuilder out) { + int arr = 0; + while (d.charAt(0) == '[') { + out.append('A'); + d = d.substring(1); + } if (d.charAt(0) == 'L') { assert d.charAt(d.length() - 1) == ';'; out.append(d.replace('/', '_').substring(0, d.length() - 1)); diff -r 82476405e1ad -r 96e44a3f544d vm/src/test/java/org/apidesign/vm4brwsr/Array.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Tue Sep 25 14:19:12 2012 +0200 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Array.java Tue Sep 25 17:29:41 2012 +0200 @@ -53,14 +53,21 @@ private static final Array[] ARR = { new Array(), new Array(), new Array() }; + private static Array[] arr() { + return ARR; + } + private static T[] filter(T[] in) { + return in; + } + public static double sum() { double sum = 0.0; - for (int i = 0; i < ARR.length; i++) { - sum += ARR[i].bytes(); - sum += ARR[i].shorts(); - sum += ARR[i].ints()[2]; - sum += ARR[i].floats(); - sum += ARR[i].doubles(); + for (int i = 0; i < arr().length; i++) { + sum += arr()[i].bytes(); + sum += arr()[i].shorts(); + sum += arr()[i].ints()[2]; + sum += arr()[i].floats(); + sum += filter(arr())[i].doubles(); } return sum; }