Mercurial > hg > graal-compiler
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpression.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 | b31b2f289e7d |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpression.java Mon Dec 29 18:32:03 2014 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpression.java Tue Feb 03 15:07:07 2015 +0100 @@ -36,8 +36,23 @@ return Parser.parse(input); } - public final List<Variable> findBoundVariables() { - final List<Variable> variables = new ArrayList<>(); + public final Set<VariableElement> findBoundVariableElements() { + final Set<VariableElement> variables = new HashSet<>(); + this.accept(new AbstractDSLExpressionVisitor() { + + @Override + public void visitVariable(Variable variable) { + if (variable.getReceiver() == null) { + variables.add(variable.getResolvedVariable()); + } + } + + }); + return variables; + } + + public final Set<Variable> findBoundVariables() { + final Set<Variable> variables = new HashSet<>(); this.accept(new AbstractDSLExpressionVisitor() { @Override @@ -52,12 +67,7 @@ } public final boolean isVariableBound(VariableElement variableElement) { - for (Variable variable : findBoundVariables()) { - if (variable.getResolvedVariable() == variableElement) { - return true; - } - } - return false; + return findBoundVariableElements().contains(variableElement); } public abstract TypeMirror getResolvedType(); @@ -217,7 +227,11 @@ @Override public TypeMirror getResolvedType() { - return resolvedMethod != null ? resolvedMethod.getReturnType() : null; + if (resolvedMethod.getKind() == ElementKind.CONSTRUCTOR) { + return resolvedMethod.getEnclosingElement().asType(); + } else { + return resolvedMethod != null ? resolvedMethod.getReturnType() : null; + } } public ExecutableElement getResolvedMethod() {