Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java @ 19294:b31b2f289e7d
Truffle-DSL: fix unnecessary frame cast warning.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 11 Feb 2015 16:10:45 +0100 |
parents | 21b9b9941775 |
children | 8e4f683e16d9 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Wed Feb 11 12:13:44 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Wed Feb 11 16:10:45 2015 +0100 @@ -2125,13 +2125,19 @@ return new CodeTree[]{expressionBuilder.build(), assertionBuilder.build()}; } - private static Map<Variable, CodeTree> castBoundTypes(Map<Variable, LocalVariable> bindings) { + private Map<Variable, CodeTree> castBoundTypes(Map<Variable, LocalVariable> bindings) { + Map<Variable, CodeTree> resolvedBindings = new HashMap<>(); for (Variable variable : bindings.keySet()) { LocalVariable localVariable = bindings.get(variable); CodeTree resolved = localVariable.createReference(); - if (!ElementUtils.typeEquals(variable.getResolvedType(), localVariable.getTypeMirror())) { - resolved = CodeTreeBuilder.createBuilder().cast(variable.getResolvedType(), resolved).build(); + TypeMirror sourceType = localVariable.getTypeMirror(); + TypeMirror targetType = variable.getResolvedTargetType(); + if (targetType == null) { + targetType = variable.getResolvedType(); + } + if (!ElementUtils.isAssignable(sourceType, targetType)) { + resolved = CodeTreeBuilder.createBuilder().cast(targetType, resolved).build(); } resolvedBindings.put(variable, resolved); } @@ -2573,6 +2579,11 @@ return newType(type.getTypeSystem().getGenericTypeData()); } + @Override + public String toString() { + return "Local[type = " + getTypeMirror() + ", name = " + name + ", accessWith = " + accessorTree + "]"; + } + } private interface SpecializationExecution {