Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpressionResolver.java @ 20939:f83fd99b2962
Truffle-DSL: add support for null literals.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 14 Apr 2015 15:12:48 +0200 |
parents | 3648df587223 |
children |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpressionResolver.java Tue Apr 14 15:12:48 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpressionResolver.java Tue Apr 14 15:12:48 2015 +0200 @@ -197,27 +197,32 @@ public void visitVariable(Variable variable) { List<VariableElement> lookupVariables; DSLExpression receiver = variable.getReceiver(); - if (receiver == null) { - lookupVariables = this.variables; + if (variable.getName().equals("null")) { + variable.setResolvedVariable(new CodeVariableElement(new CodeTypeMirror(TypeKind.NULL), "null")); } else { - TypeMirror type = receiver.getResolvedType(); - if (type.getKind() == TypeKind.DECLARED) { - type = context.reloadType(type); // ensure ECJ has the type loaded - lookupVariables = new ArrayList<>(); - variablesIn(lookupVariables, context.getEnvironment().getElementUtils().getAllMembers((TypeElement) ((DeclaredType) type).asElement()), true); - } else if (type.getKind() == TypeKind.ARRAY) { - lookupVariables = Arrays.<VariableElement> asList(new CodeVariableElement(context.getType(int.class), "length")); + if (receiver == null) { + lookupVariables = this.variables; } else { - lookupVariables = Collections.emptyList(); + TypeMirror type = receiver.getResolvedType(); + if (type.getKind() == TypeKind.DECLARED) { + type = context.reloadType(type); // ensure ECJ has the type loaded + lookupVariables = new ArrayList<>(); + variablesIn(lookupVariables, context.getEnvironment().getElementUtils().getAllMembers((TypeElement) ((DeclaredType) type).asElement()), true); + } else if (type.getKind() == TypeKind.ARRAY) { + lookupVariables = Arrays.<VariableElement> asList(new CodeVariableElement(context.getType(int.class), "length")); + } else { + lookupVariables = Collections.emptyList(); + } + } + + for (VariableElement variableElement : lookupVariables) { + if (variableElement.getSimpleName().toString().equals(variable.getName())) { + variable.setResolvedVariable(variableElement); + break; + } } } - for (VariableElement variableElement : lookupVariables) { - if (variableElement.getSimpleName().toString().equals(variable.getName())) { - variable.setResolvedVariable(variableElement); - break; - } - } if (variable.getResolvedVariable() == null) { throw new InvalidExpressionException(String.format("%s cannot be resolved.", variable.getName())); }