vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 397 2adac52f955e
parent 392 44a5802816be
child 398 945c799a6812
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Dec 28 12:35:32 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Dec 29 19:46:09 2012 +0100
     1.3 @@ -135,19 +135,27 @@
     1.4                  }
     1.5                  continue;
     1.6              }
     1.7 +            String prefix;
     1.8              String mn;
     1.9              if (m.isStatic()) {
    1.10 -                mn = generateStaticMethod("\n    c.", m, toInitilize);
    1.11 +                prefix = "\n    c.";
    1.12 +                mn = generateStaticMethod(prefix, m, toInitilize);
    1.13              } else {
    1.14 -                mn = generateInstanceMethod("\n    c.", m);
    1.15 +                if (m.isConstructor()) {
    1.16 +                    prefix = "\n    CLS.";
    1.17 +                    mn = generateInstanceMethod(prefix, m);
    1.18 +                } else {
    1.19 +                    prefix = "\n    c.";
    1.20 +                    mn = generateInstanceMethod(prefix, m);
    1.21 +                }
    1.22              }
    1.23              byte[] runAnno = m.findAnnotationData(false);
    1.24              if (runAnno != null) {
    1.25 -                out.append("\n    c.").append(mn).append(".anno = {");
    1.26 +                out.append(prefix).append(mn).append(".anno = {");
    1.27                  generateAnno(jc, out, runAnno);
    1.28                  out.append("\n    };");
    1.29              }
    1.30 -            out.append("\n    c.").append(mn).append(".access = " + m.getAccess()).append(";");
    1.31 +            out.append(prefix).append(mn).append(".access = " + m.getAccess()).append(";");
    1.32          }
    1.33          out.append("\n    c.constructor = CLS;");
    1.34          out.append("\n    c.$instOf_").append(className).append(" = true;");
    1.35 @@ -1122,7 +1130,7 @@
    1.36                          final String classInternalName = jc.getClassName(e.catch_cpx);
    1.37                          addReference(classInternalName);
    1.38                          out.append("if (e.$instOf_"+classInternalName.replace('/', '_')+") {");
    1.39 -                        out.append("gt="+e.handler_pc+"; continue;");
    1.40 +                        out.append("gt="+e.handler_pc+"; stA0 = e; continue;");
    1.41                          out.append("} ");
    1.42                      } else {
    1.43                          //finally - todo
    1.44 @@ -1311,6 +1319,9 @@
    1.45          final String in = mi[0];
    1.46          out.append(accessClass(in.replace('/', '_')));
    1.47          out.append("(false).");
    1.48 +        if (mn.startsWith("cons_")) {
    1.49 +            out.append("constructor.");
    1.50 +        }
    1.51          out.append(mn);
    1.52          out.append('(');
    1.53          if (numArguments > 0) {