diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java @ 16909:62cfffca9be2

Truffle-DSL: some more performance optimizations.
author Christian Humer <christian.humer@gmail.com>
date Sat, 23 Aug 2014 19:31:18 +0200
parents 23415229349b
children c88ab4f1f04a
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Sat Aug 23 19:31:13 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Sat Aug 23 19:31:18 2014 +0200
@@ -262,7 +262,7 @@
             write(f.getSimpleName());
             if (init != null) {
                 write("(");
-                init.acceptCodeElementScanner(this, p);
+                visitTree(init, p, f);
                 write(")");
             }
         } else {
@@ -292,7 +292,7 @@
             write(f.getSimpleName());
             if (init != null) {
                 write(" = ");
-                init.acceptCodeElementScanner(this, p);
+                visitTree(init, p, f);
             }
         }
         return null;
@@ -459,11 +459,14 @@
 
     @Override
     public void visitImport(CodeImport e, Void p) {
+        write("import ");
         if (e.isStaticImport()) {
-            write("import static ").write(e.getImportString()).write(";");
-        } else {
-            write("import ").write(e.getImportString()).write(";");
+            write("static ");
         }
+        write(e.getPackageName());
+        write(".");
+        write(e.getSymbolName());
+        write(";");
     }
 
     @Override
@@ -507,7 +510,7 @@
         } else if (e.getBodyTree() != null) {
             writeLn(" {");
             indent(1);
-            e.getBodyTree().acceptCodeElementScanner(this, p);
+            visitTree(e.getBodyTree(), p, e);
             dedent(1);
             writeLn("}");
         } else if (e.getBody() != null) {
@@ -522,29 +525,27 @@
     }
 
     @Override
-    public void visitTree(CodeTree e, Void p) {
+    public void visitTree(CodeTree e, Void p, Element enclosingElement) {
         CodeTreeKind kind = e.getCodeKind();
 
         switch (kind) {
             case COMMA_GROUP:
                 List<CodeTree> children = e.getEnclosedElements();
-                for (int i = 0; i < children.size(); i++) {
-                    children.get(i).acceptCodeElementScanner(this, p);
-                    if (i < e.getEnclosedElements().size() - 1) {
-                        write(", ");
+                if (children != null) {
+                    for (int i = 0; i < children.size(); i++) {
+                        visitTree(children.get(i), p, enclosingElement);
+                        if (i < e.getEnclosedElements().size() - 1) {
+                            write(", ");
+                        }
                     }
                 }
                 break;
             case GROUP:
-                for (CodeTree tree : e.getEnclosedElements()) {
-                    tree.acceptCodeElementScanner(this, p);
-                }
+                super.visitTree(e, p, enclosingElement);
                 break;
             case INDENT:
                 indent(1);
-                for (CodeTree tree : e.getEnclosedElements()) {
-                    tree.acceptCodeElementScanner(this, p);
-                }
+                super.visitTree(e, p, enclosingElement);
                 dedent(1);
                 break;
             case NEW_LINE:
@@ -559,20 +560,20 @@
                 break;
             case STATIC_FIELD_REFERENCE:
                 if (e.getString() != null) {
-                    write(imports.createStaticFieldReference(e, e.getType(), e.getString()));
+                    write(imports.createStaticFieldReference(enclosingElement, e.getType(), e.getString()));
                 } else {
                     write("null");
                 }
                 break;
             case STATIC_METHOD_REFERENCE:
                 if (e.getString() != null) {
-                    write(imports.createStaticMethodReference(e, e.getType(), e.getString()));
+                    write(imports.createStaticMethodReference(enclosingElement, e.getType(), e.getString()));
                 } else {
                     write("null");
                 }
                 break;
             case TYPE:
-                write(useImport(e, e.getType()));
+                write(useImport(enclosingElement, e.getType()));
                 break;
             default:
                 assert false;
@@ -676,8 +677,9 @@
 
                 // TODO(CH): fails in normal usage - output ok though
                 // assert lineLength + (end - i) + 2 < MAX_LINE_LENGTH;
-
-                write("\"" + string.substring(i, end) + "\"");
+                write("\"");
+                write(string.substring(i, end));
+                write("\"");
                 size = nextSize;
             }