changeset 8593:54e227b2e199

Refactored ParameterSpec constructors.
author Christian Humer <christian.humer@gmail.com>
date Mon, 01 Apr 2013 12:14:54 +0200
parents a80bf36c6a1e
children ce6e8672f798
files graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/GenericParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/MethodParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ShortCircuitParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationListenerParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/ParameterSpec.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCastParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCheckParser.java
diffstat 9 files changed, 65 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -30,7 +30,6 @@
 
 import com.oracle.truffle.codegen.processor.*;
 import com.oracle.truffle.codegen.processor.template.*;
-import com.oracle.truffle.codegen.processor.template.ParameterSpec.Cardinality;
 import com.oracle.truffle.codegen.processor.typesystem.*;
 
 public class ExecutableTypeMethodParser extends MethodParser<ExecutableTypeData> {
@@ -47,10 +46,13 @@
         types.addAll(getNode().getTypeSystem().getPrimitiveTypeMirrors());
         types.add(getContext().getType(void.class));
 
-        ParameterSpec returnTypeSpec = new ParameterSpec("executedValue", types, false, Cardinality.ONE, true);
+        ParameterSpec returnTypeSpec = new ParameterSpec("executedValue", types);
+        returnTypeSpec.setSignature(true);
 
         List<ParameterSpec> parameters = new ArrayList<>();
-        parameters.add(new ParameterSpec("frame", getContext().getTruffleTypes().getFrame(), true, false));
+        ParameterSpec frameSpec = new ParameterSpec("frame", getContext().getTruffleTypes().getFrame());
+        frameSpec.setOptional(true);
+        parameters.add(frameSpec);
         return new MethodSpec(new ArrayList<TypeMirror>(), returnTypeSpec, parameters);
     }
 
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/GenericParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/GenericParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -31,7 +31,6 @@
 import com.oracle.truffle.api.codegen.*;
 import com.oracle.truffle.codegen.processor.*;
 import com.oracle.truffle.codegen.processor.template.*;
-import com.oracle.truffle.codegen.processor.template.ParameterSpec.*;
 
 public class GenericParser extends MethodParser<SpecializationData> {
 
@@ -51,7 +50,9 @@
         for (ExecutableTypeData type : execTypes) {
             types.add(type.getType().getPrimitiveType());
         }
-        return new ParameterSpec(valueName, types, false, Cardinality.ONE, true);
+        ParameterSpec spec = new ParameterSpec(valueName, types);
+        spec.setSignature(true);
+        return spec;
     }
 
     @Override
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/MethodParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/MethodParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -43,7 +43,22 @@
     }
 
     protected ParameterSpec createValueParameterSpec(String valueName, NodeData nodeData, boolean optional) {
-        return new ParameterSpec(valueName, nodeData, optional, Cardinality.ONE, true);
+        ParameterSpec spec = new ParameterSpec(valueName, nodeTypeMirrors(nodeData));
+        spec.setOptional(optional);
+        spec.setSignature(true);
+        return spec;
+    }
+
+    private static List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
+        Set<TypeMirror> typeMirrors = new LinkedHashSet<>();
+
+        for (ExecutableTypeData typeData : nodeData.getExecutableTypes()) {
+            typeMirrors.add(typeData.getType().getPrimitiveType());
+        }
+
+        typeMirrors.add(nodeData.getTypeSystem().getGenericType());
+
+        return new ArrayList<>(typeMirrors);
     }
 
     protected ParameterSpec createReturnParameterSpec() {
@@ -60,7 +75,9 @@
         List<ParameterSpec> defaultParameters = new ArrayList<>();
 
         if (getNode().supportsFrame()) {
-            defaultParameters.add(new ParameterSpec("frame", getContext().getTruffleTypes().getFrame(), true, false));
+            ParameterSpec frameSpec = new ParameterSpec("frame", getContext().getTruffleTypes().getFrame());
+            frameSpec.setOptional(true);
+            defaultParameters.add(frameSpec);
         }
 
         TypeMirror declaredType = Utils.findNearestEnclosingType(method).asType();
@@ -73,7 +90,8 @@
 
         for (NodeFieldData field : getNode().getFields()) {
             if (field.getKind() == FieldKind.FIELD) {
-                ParameterSpec spec = new ParameterSpec(field.getName(), field.getType(), true, false);
+                ParameterSpec spec = new ParameterSpec(field.getName(), field.getType());
+                spec.setOptional(true);
                 spec.setLocal(true);
                 defaultParameters.add(spec);
             }
@@ -97,7 +115,7 @@
                     break;
                 }
 
-                defaultParameters.add(new ParameterSpec(shortCircuitValueName(valueName), getContext().getType(boolean.class), false, false));
+                defaultParameters.add(new ParameterSpec(shortCircuitValueName(valueName), getContext().getType(boolean.class)));
                 defaultParameters.add(createValueParameterSpec(valueName, field.getNodeData(), false));
             } else {
                 assert false;
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ShortCircuitParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ShortCircuitParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -54,7 +54,7 @@
 
     @Override
     protected ParameterSpec createReturnParameterSpec() {
-        return new ParameterSpec("has", getContext().getType(boolean.class), false, false);
+        return new ParameterSpec("has", getContext().getType(boolean.class));
     }
 
     @Override
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationListenerParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationListenerParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -43,7 +43,7 @@
 
     @Override
     protected ParameterSpec createReturnParameterSpec() {
-        return new ParameterSpec("void", getContext().getType(void.class), false, false);
+        return new ParameterSpec("void", getContext().getType(void.class));
     }
 
     @Override
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/ParameterSpec.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/ParameterSpec.java	Mon Apr 01 12:14:54 2013 +0200
@@ -27,8 +27,6 @@
 import javax.lang.model.type.*;
 
 import com.oracle.truffle.codegen.processor.*;
-import com.oracle.truffle.codegen.processor.node.*;
-import com.oracle.truffle.codegen.processor.typesystem.*;
 
 public class ParameterSpec {
 
@@ -38,33 +36,33 @@
 
     private final String name;
     private final List<TypeMirror> allowedTypes;
+
+    /** Cardinality one or multiple. */
     private Cardinality cardinality;
-    private final boolean optional;
-    private final boolean signature;
+    /** Type is optional can be dismissed. */
+    private boolean optional;
+    /** Type is part of the method signature. Relevant for comparisons. */
+    private boolean signature;
+    /** Type must be indexed when parsing. */
     private boolean indexed;
+    /** Type is bound to local final variable. */
     private boolean local;
 
-    public ParameterSpec(String name, List<TypeMirror> allowedTypes, boolean optional, Cardinality cardinality, boolean signature) {
-        this.allowedTypes = allowedTypes;
-        this.name = name;
-        this.optional = optional;
-        this.cardinality = cardinality;
-        this.signature = signature;
+    public ParameterSpec(String name, TypeMirror... allowedTypes) {
+        this(name, Arrays.asList(allowedTypes));
     }
 
-    /** Type constructor. */
-    public ParameterSpec(String name, TypeMirror singleFixedType, boolean optional, boolean signature) {
-        this(name, Arrays.asList(singleFixedType), optional, Cardinality.ONE, signature);
+    public ParameterSpec(String name, List<TypeMirror> allowedTypes) {
+        this.name = name;
+        this.allowedTypes = allowedTypes;
     }
 
-    /** Type system value constructor. */
-    public ParameterSpec(String name, TypeSystemData typeSystem, boolean optional, Cardinality cardinality, boolean signature) {
-        this(name, typeSystem.getPrimitiveTypeMirrors(), optional, cardinality, signature);
+    public void setOptional(boolean optional) {
+        this.optional = optional;
     }
 
-    /** Node value constructor. */
-    public ParameterSpec(String name, NodeData nodeData, boolean optional, Cardinality cardinality, boolean signature) {
-        this(name, nodeTypeMirrors(nodeData), optional, cardinality, signature);
+    public void setSignature(boolean signature) {
+        this.signature = signature;
     }
 
     public void setLocal(boolean local) {
@@ -91,18 +89,6 @@
         this.cardinality = cardinality;
     }
 
-    private static List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
-        Set<TypeMirror> typeMirrors = new LinkedHashSet<>();
-
-        for (ExecutableTypeData typeData : nodeData.getExecutableTypes()) {
-            typeMirrors.add(typeData.getType().getPrimitiveType());
-        }
-
-        typeMirrors.add(nodeData.getTypeSystem().getGenericType());
-
-        return new ArrayList<>(typeMirrors);
-    }
-
     public final String getName() {
         return name;
     }
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -49,9 +49,12 @@
     public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) {
         List<ParameterSpec> specs = new ArrayList<>();
         for (ActualParameter parameter : specialization.getParameters()) {
-            specs.add(new ParameterSpec(parameter.getSpecification().getName(), parameter.getActualType(), true, true));
+            ParameterSpec spec = new ParameterSpec(parameter.getSpecification().getName(), parameter.getActualType());
+            spec.setSignature(true);
+            spec.setOptional(true);
+            specs.add(spec);
         }
-        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class), false, false);
+        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class));
         return new MethodSpec(Collections.<TypeMirror> emptyList(), returnTypeSpec, specs);
     }
 
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCastParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCastParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -31,7 +31,6 @@
 import com.oracle.truffle.api.codegen.*;
 import com.oracle.truffle.codegen.processor.*;
 import com.oracle.truffle.codegen.processor.template.*;
-import com.oracle.truffle.codegen.processor.template.ParameterSpec.Cardinality;
 
 class TypeCastParser extends TypeSystemMethodParser<TypeCastData> {
 
@@ -46,8 +45,12 @@
             return null;
         }
         List<ParameterSpec> specs = new ArrayList<>();
-        specs.add(new ParameterSpec("value", getTypeSystem(), false, Cardinality.ONE, true));
-        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", targetType.getPrimitiveType(), false, true);
+        ParameterSpec valueSpec = new ParameterSpec("value", getTypeSystem().getPrimitiveTypeMirrors());
+        valueSpec.setSignature(true);
+        specs.add(valueSpec);
+
+        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", targetType.getPrimitiveType());
+        returnTypeSpec.setSignature(true);
         MethodSpec spec = new MethodSpec(Collections.<TypeMirror> emptyList(), returnTypeSpec, specs);
         return spec;
     }
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCheckParser.java	Mon Apr 01 11:52:38 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCheckParser.java	Mon Apr 01 12:14:54 2013 +0200
@@ -31,7 +31,6 @@
 import com.oracle.truffle.api.codegen.*;
 import com.oracle.truffle.codegen.processor.*;
 import com.oracle.truffle.codegen.processor.template.*;
-import com.oracle.truffle.codegen.processor.template.ParameterSpec.Cardinality;
 
 class TypeCheckParser extends TypeSystemMethodParser<TypeCheckData> {
 
@@ -46,8 +45,11 @@
             return null;
         }
         List<ParameterSpec> specs = new ArrayList<>();
-        specs.add(new ParameterSpec("value", getTypeSystem(), false, Cardinality.ONE, true));
-        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class), false, true);
+        ParameterSpec valueSpec = new ParameterSpec("value", getTypeSystem().getPrimitiveTypeMirrors());
+        valueSpec.setSignature(true);
+        specs.add(valueSpec);
+        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class));
+        returnTypeSpec.setSignature(true);
         MethodSpec spec = new MethodSpec(Collections.<TypeMirror> emptyList(), returnTypeSpec, specs);
         return spec;
     }