Mercurial > hg > truffle
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(")")); } }