# HG changeset patch # User Christian Humer # Date 1381517114 -7200 # Node ID c78612fb0120f6722d1a1c0dd55e069dfad12908 # Parent 80963ec8134ef6d0964fc180d4bdcbab5c92f753 Truffle-DSL. fixed some issues with new generation strategy. diff -r 80963ec8134e -r c78612fb0120 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java --- 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 possiblePolymorphicTypes = lookupPolymorphicTargetTypes(targetParameter); + TreeSet 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 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; }