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 {