changeset 12398:c78612fb0120

Truffle-DSL. fixed some issues with new generation strategy.
author Christian Humer <christian.humer@gmail.com>
date Fri, 11 Oct 2013 20:45:14 +0200
parents 80963ec8134e
children 980db6c0bcd3
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Fri Oct 11 20:07:50 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Fri Oct 11 20:45:14 2013 +0200
@@ -1966,8 +1966,8 @@
 
         private CodeTree createExecuteChild(CodeTreeBuilder parent, NodeChildData child, ExecutableTypeData sourceExecutable, ActualParameter targetParameter, ActualParameter unexpectedParameter) {
             SpecializationData specialization = getModel();
-            if (specialization.isPolymorphic() && targetParameter.getTypeSystemType().isGeneric() && unexpectedParameter == null) {
-                TreeSet<TypeData> possiblePolymorphicTypes = lookupPolymorphicTargetTypes(targetParameter);
+            TreeSet<TypeData> possiblePolymorphicTypes = lookupPolymorphicTargetTypes(targetParameter);
+            if (specialization.isPolymorphic() && targetParameter.getTypeSystemType().isGeneric() && unexpectedParameter == null && possiblePolymorphicTypes.size() > 1) {
 
                 CodeTreeBuilder builder = parent.create();
 
@@ -2200,9 +2200,12 @@
 
             if (getModel().isPolymorphic() && targetParameter.getTypeSystemType().isGeneric() && unexpectedParameter == null) {
                 // check for other polymorphic types
-                for (TypeData polymorphicTargetType : lookupPolymorphicTargetTypes(targetParameter)) {
-                    if (hasUnexpectedType(child, sourceParameter, polymorphicTargetType)) {
-                        return true;
+                TreeSet<TypeData> polymorphicTargetTypes = lookupPolymorphicTargetTypes(targetParameter);
+                if (polymorphicTargetTypes.size() > 1) {
+                    for (TypeData polymorphicTargetType : polymorphicTargetTypes) {
+                        if (hasUnexpectedType(child, sourceParameter, polymorphicTargetType)) {
+                            return true;
+                        }
                     }
                 }
             }
@@ -2218,10 +2221,10 @@
 
             for (TypeData implicitSourceType : implicitSourceTypes) {
                 TypeData sourceType;
+                ExecutableTypeData targetExecutable = resolveExecutableType(child, implicitSourceType);
                 if (sourceParameter != null) {
                     sourceType = sourceParameter.getTypeSystemType();
                 } else {
-                    ExecutableTypeData targetExecutable = resolveExecutableType(child, implicitSourceType);
                     if (targetExecutable.hasUnexpectedValue(getContext())) {
                         return true;
                     }