vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchlazy
changeset 205 0256fac49ea5
parent 204 590a8c98df30
child 209 bcbaed2a6627
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Nov 26 20:16:21 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Nov 26 20:29:21 2012 +0100
     1.3 @@ -74,16 +74,7 @@
     1.4          }
     1.5          StringArray toInitilize = new StringArray();
     1.6          final String className = className(jc);
     1.7 -        out.append("\nfunction ").append(className);
     1.8 -        out.append("() {");
     1.9 -        for (FieldData v : jc.getFields()) {
    1.10 -            if (!v.isStatic()) {
    1.11 -                out.append("\n  this.fld_").
    1.12 -                    append(v.getName()).append(initField(v));
    1.13 -            }
    1.14 -        }
    1.15 -        out.append("\n}");
    1.16 -        out.append("\n\nfunction ").append(className).append("_proto() {");
    1.17 +        out.append("\n\nfunction ").append(className).append("() {");
    1.18          out.append("\n  if (!").append(className).
    1.19              append(".prototype.$instOf_").append(className).append(") {");
    1.20          for (FieldData v : jc.getFields()) {
    1.21 @@ -96,7 +87,7 @@
    1.22          if (sc != null) {
    1.23              out.append("\n    var p = ").append(className)
    1.24                 .append(".prototype = ").
    1.25 -                append(sc.replace('/', '_')).append("_proto();");
    1.26 +                append(sc.replace('/', '_')).append("(true);");
    1.27          } else {
    1.28              out.append("\n    var p = ").append(className).append(".prototype;");
    1.29          }
    1.30 @@ -112,9 +103,18 @@
    1.31              out.append("\n    p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.32          }
    1.33          out.append("\n  }");
    1.34 +        out.append("\n  if (arguments.length === 0) {");
    1.35 +        for (FieldData v : jc.getFields()) {
    1.36 +            if (!v.isStatic()) {
    1.37 +                out.append("\n    this.fld_").
    1.38 +                    append(v.getName()).append(initField(v));
    1.39 +            }
    1.40 +        }
    1.41 +        out.append("\n    return this;");
    1.42 +        out.append("\n  }");
    1.43          out.append("\n  return new ").append(className).append(";");
    1.44          out.append("\n}");
    1.45 -        out.append("\n").append(className).append("_proto();");
    1.46 +        out.append("\n").append(className).append("(true);");
    1.47          StringBuilder sb = new StringBuilder();
    1.48          for (String init : toInitilize.toArray()) {
    1.49              sb.append("\n").append(init).append("();");
    1.50 @@ -129,7 +129,7 @@
    1.51          final String mn = findMethodName(m, argsCnt);
    1.52          out.append(prefix).append(mn).append(" = function");
    1.53          if (mn.equals("classV")) {
    1.54 -            toInitilize.add(className(jc) + "_proto()." + mn);
    1.55 +            toInitilize.add(className(jc) + "(true)." + mn);
    1.56          }
    1.57          out.append('(');
    1.58          String space = "";