diff -r 44a5802816be -r 2adac52f955e vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Dec 28 12:35:32 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Dec 29 19:46:09 2012 +0100 @@ -135,19 +135,27 @@ } continue; } + String prefix; String mn; if (m.isStatic()) { - mn = generateStaticMethod("\n c.", m, toInitilize); + prefix = "\n c."; + mn = generateStaticMethod(prefix, m, toInitilize); } else { - mn = generateInstanceMethod("\n c.", m); + if (m.isConstructor()) { + prefix = "\n CLS."; + mn = generateInstanceMethod(prefix, m); + } else { + prefix = "\n c."; + mn = generateInstanceMethod(prefix, m); + } } byte[] runAnno = m.findAnnotationData(false); if (runAnno != null) { - out.append("\n c.").append(mn).append(".anno = {"); + out.append(prefix).append(mn).append(".anno = {"); generateAnno(jc, out, runAnno); out.append("\n };"); } - out.append("\n c.").append(mn).append(".access = " + m.getAccess()).append(";"); + out.append(prefix).append(mn).append(".access = " + m.getAccess()).append(";"); } out.append("\n c.constructor = CLS;"); out.append("\n c.$instOf_").append(className).append(" = true;"); @@ -1122,7 +1130,7 @@ final String classInternalName = jc.getClassName(e.catch_cpx); addReference(classInternalName); out.append("if (e.$instOf_"+classInternalName.replace('/', '_')+") {"); - out.append("gt="+e.handler_pc+"; continue;"); + out.append("gt="+e.handler_pc+"; stA0 = e; continue;"); out.append("} "); } else { //finally - todo @@ -1311,6 +1319,9 @@ final String in = mi[0]; out.append(accessClass(in.replace('/', '_'))); out.append("(false)."); + if (mn.startsWith("cons_")) { + out.append("constructor."); + } out.append(mn); out.append('('); if (numArguments > 0) {