diff -r 787578f33c21 -r 00ae3f46e54f rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 10 10:08:18 2013 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Apr 26 13:35:21 2013 +0200 @@ -1787,20 +1787,11 @@ if (e.catch_cpx != 0) { //not finally final String classInternalName = jc.getClassName(e.catch_cpx); addReference(classInternalName); - if ("java/lang/Throwable".equals(classInternalName)) { - out.append("if (e.$instOf_java_lang_Throwable) {"); - out.append(" var stA0 = e;"); - out.append("} else {"); - out.append(" var stA0 = vm.java_lang_Throwable(true);"); - out.append(" vm.java_lang_Throwable.cons__VLjava_lang_String_2.call(stA0, e.toString());"); - out.append("}"); - goTo(out, current, e.handler_pc, topMostLabel); - } else { - out.append("if (e.$instOf_" + classInternalName.replace('/', '_') + ") {"); - out.append("var stA0 = e;"); - goTo(out, current, e.handler_pc, topMostLabel); - out.append("}\n"); - } + out.append("e = vm.java_lang_Throwable(false).bck2BrwsrCnvrt(e);"); + out.append("if (e.$instOf_" + classInternalName.replace('/', '_') + ") {"); + out.append("var stA0 = e;"); + goTo(out, current, e.handler_pc, topMostLabel); + out.append("}\n"); } else { finallyPC = e.handler_pc; }