Changing order, so the new <prototype> is done once, at the end of the function lazy
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 26 Nov 2012 20:16:21 +0100
branchlazy
changeset 204590a8c98df30
parent 203 c6a0b5b64133
child 205 0256fac49ea5
Changing order, so the new <prototype> is done once, at the end of the function
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Nov 25 23:14:58 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Nov 26 20:16:21 2012 +0100
     1.3 @@ -84,10 +84,8 @@
     1.4          }
     1.5          out.append("\n}");
     1.6          out.append("\n\nfunction ").append(className).append("_proto() {");
     1.7 -        out.append("\n  if (").append(className).
     1.8 +        out.append("\n  if (!").append(className).
     1.9              append(".prototype.$instOf_").append(className).append(") {");
    1.10 -        out.append("\n    return new ").append(className).append(";");
    1.11 -        out.append("\n  }");
    1.12          for (FieldData v : jc.getFields()) {
    1.13              if (v.isStatic()) {
    1.14                  generateStaticField(v);
    1.15 @@ -96,23 +94,24 @@
    1.16          // ClassName sc = jc.getSuperClass();
    1.17          String sc = jc.getSuperClassName(); // with _
    1.18          if (sc != null) {
    1.19 -            out.append("\n  var p = ").append(className)
    1.20 +            out.append("\n    var p = ").append(className)
    1.21                 .append(".prototype = ").
    1.22                  append(sc.replace('/', '_')).append("_proto();");
    1.23          } else {
    1.24 -            out.append("\n  var p = ").append(className).append(".prototype;");
    1.25 +            out.append("\n    var p = ").append(className).append(".prototype;");
    1.26          }
    1.27          for (MethodData m : jc.getMethods()) {
    1.28              if (m.isStatic()) {
    1.29 -                generateStaticMethod("\n  p.", m, toInitilize);
    1.30 +                generateStaticMethod("\n    p.", m, toInitilize);
    1.31              } else {
    1.32 -                generateInstanceMethod("\n  p.", m);
    1.33 +                generateInstanceMethod("\n    p.", m);
    1.34              }
    1.35          }
    1.36 -        out.append("\n  p.$instOf_").append(className).append(" = true;");
    1.37 +        out.append("\n    p.$instOf_").append(className).append(" = true;");
    1.38          for (String superInterface : jc.getSuperInterfaces()) {
    1.39 -            out.append("\n  p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.40 +            out.append("\n    p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
    1.41          }
    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();");