diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardParser.java @ 11439:efe58aa92f86

Truffle-DSL: guards can now be declared using any base type or interface of the target value type.
author Christian Humer <christian.humer@gmail.com>
date Tue, 27 Aug 2013 22:08:26 +0200
parents 4eb23800c907
children 43eab069ca9b
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardParser.java	Tue Aug 27 18:11:35 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardParser.java	Tue Aug 27 22:08:26 2013 +0200
@@ -26,6 +26,7 @@
 import java.util.*;
 
 import javax.lang.model.element.*;
+import javax.lang.model.type.*;
 
 import com.oracle.truffle.dsl.processor.*;
 import com.oracle.truffle.dsl.processor.node.*;
@@ -58,7 +59,8 @@
         spec.getRequired().clear();
 
         for (ActualParameter parameter : specialization.getRequiredParameters()) {
-            ParameterSpec paramSpec = new ParameterSpec(parameter.getLocalName(), parameter.getType(), getNode().getTypeSystem().getGenericType());
+            List<TypeMirror> assignableTypes = Utils.getAssignableTypes(getContext(), parameter.getType());
+            ParameterSpec paramSpec = new ParameterSpec(parameter.getLocalName(), assignableTypes);
             paramSpec.setSignature(true);
             spec.addRequired(paramSpec);
         }
@@ -89,7 +91,13 @@
             if (specializationParameter == null) {
                 newParameters.add(parameter);
             } else {
-                newParameters.add(new ActualParameter(specializationParameter.getSpecification(), parameter.getTypeSystemType(), specializationParameter.getIndex(), parameter.isImplicit()));
+                ActualParameter p;
+                if (parameter.getTypeSystemType() != null) {
+                    p = new ActualParameter(specializationParameter.getSpecification(), parameter.getTypeSystemType(), specializationParameter.getIndex(), parameter.isImplicit());
+                } else {
+                    p = new ActualParameter(specializationParameter.getSpecification(), parameter.getType(), specializationParameter.getIndex(), parameter.isImplicit());
+                }
+                newParameters.add(p);
             }
         }
         guard.setParameters(newParameters);