# HG changeset patch # User Jaroslav Tulach # Date 1348829900 -7200 # Node ID f30e2afc8ddb4e0d8d4adb2afb0a0b98fda3f6c5 # Parent db31d4001c21c5f4d1fb504c6d5ae66182f10181 Unifying the way method names are constructed so they work for arrays as well diff -r db31d4001c21 -r f30e2afc8ddb vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Sep 28 09:29:53 2012 +0200 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Sep 28 12:58:20 2012 +0200 @@ -588,9 +588,13 @@ case bc_checkcast: { int indx = readIntArg(byteCodes, i); CPClassInfo ci = jc.getConstantPool().getClass(indx); - out.append("if(stack[stack.length - 1].$instOf_") - .append(ci.getClassName().getInternalName().replace('/', '_')) - .append(" != 1) throw {};"); // XXX proper exception + final String type = ci.getClassName().getType(); + if (!type.startsWith("[")) { + // no way to check arrays right now + out.append("if(stack[stack.length - 1].$instOf_") + .append(type.replace('/', '_')) + .append(" != 1) throw {};"); // XXX proper exception + } i += 2; break; } @@ -710,24 +714,24 @@ } private String findMethodName(Method m) { - StringBuilder tmp = new StringBuilder(); + StringBuilder name = new StringBuilder(); + String descr = m.getDescriptor(); if ("".equals(m.getName())) { // NOI18N - tmp.append("consV"); // NOI18N + name.append("cons"); // NOI18N } else if ("".equals(m.getName())) { // NOI18N - tmp.append("classV"); // NOI18N + name.append("class"); // NOI18N } else { - tmp.append(m.getName()); - outType(m.getReturnType(), tmp); + name.append(m.getName()); } - List args = m.getParameters(); - for (Parameter t : args) { - outType(t.getDescriptor(), tmp); - } - return tmp.toString(); + + boolean hasReturn[] = { false }; + countArgs(findDescriptor(m.getDescriptor()), hasReturn, name); + return name.toString(); } private String findMethodName(CPMethodInfo mi, int[] cnt, boolean[] hasReturn) { StringBuilder name = new StringBuilder(); + String descr = mi.getDescriptor(); if ("".equals(mi.getName())) { // NOI18N name.append("cons"); // NOI18N } else {