diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/ast/CodeTreeBuilder.java @ 7502:6343a09b2ec1

Codegen operation generation is inferred from the node type hierarchy.
author Christian Humer <christian.humer@gmail.com>
date Fri, 18 Jan 2013 13:28:12 +0100
parents a748e4d44694
children 5e3d1a68664e
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/ast/CodeTreeBuilder.java	Thu Jan 17 17:21:16 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/ast/CodeTreeBuilder.java	Fri Jan 18 13:28:12 2013 +0100
@@ -99,12 +99,10 @@
     public CodeTreeBuilder startStatement() {
         startGroup();
         registerCallBack(new EndCallback() {
-
             @Override
             public void beforeEnd() {
                 string(";").newLine();
             }
-
             @Override
             public void afterEnd() {
             }
@@ -137,7 +135,7 @@
     }
 
     public CodeTreeBuilder startStaticCall(ExecutableElement method) {
-        return startStaticCall(Utils.findEnclosingType(method).asType(), method.getSimpleName().toString());
+        return startStaticCall(Utils.findNearestEnclosingType(method).asType(), method.getSimpleName().toString());
     }
 
     public CodeTreeBuilder staticReference(TypeMirror type, String fieldName) {
@@ -317,7 +315,17 @@
     public CodeTreeBuilder startReturn() {
         ExecutableElement method = findMethod();
         if (method != null && Utils.isVoid(method.getReturnType())) {
-            startStatement();
+            startGroup();
+            registerCallBack(new EndCallback() {
+                @Override
+                public void beforeEnd() {
+                    string(";").newLine(); // complete statement to execute
+                }
+                @Override
+                public void afterEnd() {
+                    string("return").string(";").newLine(); // emit a return;
+                }
+            });
             return this;
         } else {
             return startStatement().string("return ");
@@ -471,7 +479,7 @@
         return statement("return");
     }
 
-    private ExecutableElement findMethod() {
+    public ExecutableElement findMethod() {
         Element element = currentElement;
         while (element != null && (element.getKind() != ElementKind.METHOD)) {
             element = element.getEnclosingElement();