vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 226 907a52ed10e3
parent 224 7aa36c48c634
child 227 fae5261c8a9a
child 232 36f16c49bdef
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Nov 29 22:03:11 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat Dec 01 10:35:24 2012 +0100
     1.3 @@ -107,15 +107,16 @@
     1.4                  generateInstanceMethod("\n    p.", m);
     1.5              }
     1.6          }
     1.7 +        out.append("\n    p.constructor = CLS;");
     1.8          out.append("\n    p.$instOf_").append(className).append(" = true;");
     1.9          for (String superInterface : jc.getSuperInterfaces()) {
    1.10              out.append("\n    p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.11          }
    1.12 -        out.append("\n      if (arguments.length === 0) {");
    1.13 -        out.append("\n        return new CLS();");
    1.14 -        out.append("\n      }");
    1.15          out.append("\n  }");
    1.16          out.append("\n  if (arguments.length === 0) {");
    1.17 +        out.append("\n    if (!(this instanceof CLS)) {");
    1.18 +        out.append("\n      return new CLS();");
    1.19 +        out.append("\n    }");
    1.20          for (FieldData v : jc.getFields()) {
    1.21              if (!v.isStatic()) {
    1.22                  out.append("\n    this.fld_").
    1.23 @@ -583,9 +584,9 @@
    1.24                  case opc_new: {
    1.25                      int indx = readIntArg(byteCodes, i);
    1.26                      String ci = jc.getClassName(indx);
    1.27 -                    out.append("s.push(");
    1.28 -                    out.append("new ").append(ci.replace('/','_'));
    1.29 -                    out.append(");");
    1.30 +                    out.append("s.push(new ");
    1.31 +                    out.append(ci.replace('/','_'));
    1.32 +                    out.append("());");
    1.33                      addReference(ci);
    1.34                      i += 2;
    1.35                      break;