diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/DSLExpressionGenerator.java @ 19289:62c43fcf5be2

Truffle-DSL: implement @Cached and fixes for the new guard expression syntax.
author Christian Humer <christian.humer@gmail.com>
date Tue, 03 Feb 2015 15:07:07 +0100
parents 08aa0372dad4
children f83fd99b2962
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/DSLExpressionGenerator.java	Mon Dec 29 18:32:03 2014 +0100
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/DSLExpressionGenerator.java	Tue Feb 03 15:07:07 2015 +0100
@@ -61,7 +61,9 @@
 
         CodeTreeBuilder builder = CodeTreeBuilder.createBuilder();
 
-        if (call.getReceiver() == null) {
+        if (call.getResolvedMethod().getKind() == ElementKind.CONSTRUCTOR) {
+            builder.startNew(call.getResolvedType());
+        } else if (call.getReceiver() == null) {
             if (isStatic(method)) {
                 builder.startStaticCall(method);
             } else {
@@ -89,7 +91,7 @@
     }
 
     public void visitNegate(Negate negate) {
-        push(combine(string("!"), pop()));
+        push(combine(string("!"), combine(string("("), pop(), string(")"))));
     }
 
     public void visitVariable(Variable variable) {
@@ -136,7 +138,7 @@
     }
 
     private static CodeTree staticReference(VariableElement var) {
-        return CodeTreeBuilder.createBuilder().staticReference(var.asType(), var.getSimpleName().toString()).build();
+        return CodeTreeBuilder.createBuilder().staticReference(var.getEnclosingElement().asType(), var.getSimpleName().toString()).build();
     }
 
     private void push(CodeTree tree) {
@@ -150,7 +152,7 @@
     public static CodeTree write(DSLExpression expression, CodeTree root, Map<Variable, CodeTree> bindings) {
         DSLExpressionGenerator writer = new DSLExpressionGenerator(root, bindings);
         expression.accept(writer);
-        return writer.pop();
+        return combine(string("("), writer.pop(), string(")"));
     }
 
 }