# HG changeset patch # User Christian Humer # Date 1429098578 -7200 # Node ID 05a2b72c071fc7a89257ad2157e8f9c00642a671 # Parent 05e1ab8c5c6a87861b7dfb372182f092ae908ed5 Truffle-DSL: fixed potential non generic executes in uninitialized nodes. diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Wed Apr 15 13:49:38 2015 +0200 @@ -1683,12 +1683,7 @@ if (var == null) { TypeMirror targetType; if (specialization == null) { - List genericTypes = node.getGenericTypes(execution); - if (genericTypes.isEmpty()) { - targetType = genericType; - } else { - targetType = genericTypes.get(0); - } + targetType = node.getGenericType(execution); } else { targetType = specialization.findParameterOrDie(execution).getType(); } diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Wed Apr 15 13:49:38 2015 +0200 @@ -168,6 +168,8 @@ if (element1 == null || element2 == null) { if (element1 != null) { return type1; + } else if (element2 != null) { + return type2; } return context.getType(Object.class); } diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java Wed Apr 15 13:49:38 2015 +0200 @@ -192,9 +192,7 @@ for (int i = from.getEvaluatedCount(); i < to.getEvaluatedCount(); i++) { TypeMirror delegateToParameter = to.getEvaluatedParameters().get(i); if (i < node.getChildExecutions().size()) { - List genericTypes = node.getGenericTypes(node.getChildExecutions().get(i)); - - TypeMirror genericType = ElementUtils.getCommonSuperType(context, genericTypes); + TypeMirror genericType = node.getGenericType(node.getChildExecutions().get(i)); if (!isSubtypeBoxed(context, genericType, delegateToParameter)) { return false; } diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java Wed Apr 15 13:49:38 2015 +0200 @@ -554,6 +554,10 @@ return getNodeId().compareTo(o.getNodeId()); } + public TypeMirror getGenericType(NodeExecutionData execution) { + return ElementUtils.getCommonSuperType(getContext(), getGenericTypes(execution)); + } + public List getGenericTypes(NodeExecutionData execution) { List types = new ArrayList<>(); diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java Wed Apr 15 13:49:38 2015 +0200 @@ -58,12 +58,7 @@ } protected Collection getPossibleReturnTypes() { - List possibleTypes = getNode().getGenericTypes(getNode().getThisExecution()); - if (possibleTypes.size() > 1) { - return Arrays.asList(ElementUtils.getCommonSuperType(getContext(), possibleTypes)); - } else { - return possibleTypes; - } + return Arrays.asList(getNode().getGenericType(getNode().getThisExecution())); } @Override diff -r 05e1ab8c5c6a -r 05a2b72c071f graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Wed Apr 15 14:06:17 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Wed Apr 15 13:49:38 2015 +0200 @@ -1288,7 +1288,7 @@ if (execution == null) { allowedTypes = spec.getAllowedTypes(); } else { - allowedTypes = node.getGenericTypes(execution); + allowedTypes = Arrays.asList(node.getGenericType(execution)); } if (allowedTypes.size() == 1) { return allowedTypes.iterator().next();