Mercurial > hg > truffle
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; }