changeset 20966:05a2b72c071f

Truffle-DSL: fixed potential non generic executes in uninitialized nodes.
author Christian Humer <christian.humer@gmail.com>
date Wed, 15 Apr 2015 13:49:38 +0200
parents 05e1ab8c5c6a
children f61ff7f01bc2
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java
diffstat 6 files changed, 10 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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<TypeMirror> genericTypes = node.getGenericTypes(execution);
-                    if (genericTypes.isEmpty()) {
-                        targetType = genericType;
-                    } else {
-                        targetType = genericTypes.get(0);
-                    }
+                    targetType = node.getGenericType(execution);
                 } else {
                     targetType = specialization.findParameterOrDie(execution).getType();
                 }
--- 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);
         }
--- 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<TypeMirror> 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;
                 }
--- 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<TypeMirror> getGenericTypes(NodeExecutionData execution) {
         List<TypeMirror> types = new ArrayList<>();
 
--- 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<TypeMirror> getPossibleReturnTypes() {
-        List<TypeMirror> 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
--- 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();