# HG changeset patch # User Christian Humer # Date 1364811294 -7200 # Node ID 54e227b2e199620143ab73ab7174842483fead2a # Parent a80bf36c6a1e311dd09d29b090c247acb93fa522 Refactored ParameterSpec constructors. diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java --- 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 { @@ -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 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(), returnTypeSpec, parameters); } diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/GenericParser.java --- 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 { @@ -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 diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/MethodParser.java --- 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 nodeTypeMirrors(NodeData nodeData) { + Set 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 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; diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ShortCircuitParser.java --- 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 diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationListenerParser.java --- 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 diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/ParameterSpec.java --- 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 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 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 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 nodeTypeMirrors(NodeData nodeData) { - Set 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; } diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java --- 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 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. emptyList(), returnTypeSpec, specs); } diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCastParser.java --- 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 { @@ -46,8 +45,12 @@ return null; } List 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. emptyList(), returnTypeSpec, specs); return spec; } diff -r a80bf36c6a1e -r 54e227b2e199 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/TypeCheckParser.java --- 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 { @@ -46,8 +45,11 @@ return null; } List 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. emptyList(), returnTypeSpec, specs); return spec; }