Shorter prototype methods
authorJaroslav Tulach <jtulach@netbeans.org>
Tue, 30 Oct 2012 22:43:18 +0100
changeset 1300b7c9b5b8079
parent 129 15df78d24302
child 131 dbfbcd718146
Shorter prototype methods
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Oct 30 22:35:32 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Oct 30 22:43:18 2012 +0100
     1.3 @@ -121,24 +121,26 @@
     1.4          out.append("\n}\n\nfunction ").append(className).append("_proto() {");
     1.5          out.append("\n  if (").append(className).
     1.6              append(".prototype.$instOf_").append(className).append(") {");
     1.7 -        out.append("\n    return ").append(className).append(".prototype;");
     1.8 +        out.append("\n    return new ").append(className).append(";");
     1.9          out.append("\n  }");
    1.10          ClassName sc = jc.getSuperClass();
    1.11          if (sc != null) {
    1.12 -            out.append("\n  ").append(sc.getInternalName().replace('/', '_')).append("_proto();");
    1.13 -            out.append("\n  ").append(className)
    1.14 -               .append(".prototype = new ").append(sc.getInternalName().replace('/', '_')).append(';');
    1.15 +            out.append("\n  var p = ").append(className)
    1.16 +               .append(".prototype = ").
    1.17 +                append(sc.getInternalName().replace('/', '_')).append("_proto();");
    1.18 +        } else {
    1.19 +            out.append("\n  var p = ").append(className).append(".prototype");
    1.20          }
    1.21          for (Method m : jc.getMethods()) {
    1.22              if (!m.getName().contains("<init>") && !m.getName().contains("<cinit>")) {
    1.23 -                compiler.generateMethodReference("\n  " + className + ".prototype.", m);
    1.24 +                compiler.generateMethodReference("\n  p.", m);
    1.25              }
    1.26          }
    1.27 -        out.append("\n  " + className + ".prototype.$instOf_").append(className).append(" = true;");
    1.28 +        out.append("\n  p.$instOf_").append(className).append(" = true;");
    1.29          for (ClassName superInterface : jc.getInterfaces()) {
    1.30 -            out.append("\n  " + className + ".prototype.$instOf_").append(superInterface.getInternalName().replace('/', '_')).append(" = true;");
    1.31 +            out.append("\n  p.$instOf_").append(superInterface.getInternalName().replace('/', '_')).append(" = true;");
    1.32          }
    1.33 -        out.append("\n  return ").append(className).append(".prototype;");
    1.34 +        out.append("\n  return new ").append(className).append(";");
    1.35          out.append("\n}");
    1.36          out.append("\n").append(className).append("_proto();");
    1.37          StringBuilder sb = new StringBuilder();