diff -r 21da8e2f5911 -r 9b5868bf56ec vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 03 16:20:21 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 10 13:09:19 2013 +0100 @@ -1594,9 +1594,19 @@ if (e.catch_cpx != 0) { //not finally final String classInternalName = jc.getClassName(e.catch_cpx); addReference(classInternalName); - out.append("if (e.$instOf_" + classInternalName.replace('/', '_') + ") {"); - out.append("gt=" + e.handler_pc + "; stA0 = e; continue;"); - out.append("}\n"); + if ("java/lang/Throwable".equals(classInternalName)) { + out.append("if (e.$instOf_java_lang_Throwable) {"); + out.append(" stA0 = e;"); + out.append("} else {"); + out.append(" stA0 = vm.java_lang_Throwable(true);"); + out.append(" vm.java_lang_Throwable.cons__VLjava_lang_String_2(stA0, e.toString());"); + out.append("}"); + out.append("gt=" + e.handler_pc + "; continue;"); + } else { + out.append("if (e.$instOf_" + classInternalName.replace('/', '_') + ") {"); + out.append("gt=" + e.handler_pc + "; stA0 = e; continue;"); + out.append("}\n"); + } } else { finallyPC = e.handler_pc; }