Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardParser.java @ 13527:25ecb47a6d0e
Truffle-DSL: Added support for references to child arrays in @ShortCircuit;
Introduced new layer NodeExecutionData to the implementation model which is in between NodeChildData and the actual parameters..
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 07 Jan 2014 12:22:47 +0100 |
parents | 2b9fcffd6f36 |
children | bd28da642eea |
comparison
equal
deleted
inserted
replaced
13483:37ec2cabf397 | 13527:25ecb47a6d0e |
---|---|
21 * questions. | 21 * questions. |
22 */ | 22 */ |
23 package com.oracle.truffle.dsl.processor.typesystem; | 23 package com.oracle.truffle.dsl.processor.typesystem; |
24 | 24 |
25 import java.lang.annotation.*; | 25 import java.lang.annotation.*; |
26 import java.util.*; | |
27 | 26 |
28 import javax.lang.model.element.*; | 27 import javax.lang.model.element.*; |
29 import javax.lang.model.type.*; | |
30 | 28 |
31 import com.oracle.truffle.dsl.processor.*; | 29 import com.oracle.truffle.dsl.processor.*; |
32 import com.oracle.truffle.dsl.processor.node.*; | 30 import com.oracle.truffle.dsl.processor.node.*; |
33 import com.oracle.truffle.dsl.processor.template.*; | 31 import com.oracle.truffle.dsl.processor.template.*; |
34 | 32 |
51 setEmitErrors(false); | 49 setEmitErrors(false); |
52 setParseNullOnError(false); | 50 setParseNullOnError(false); |
53 } | 51 } |
54 | 52 |
55 @Override | 53 @Override |
54 protected ParameterSpec createValueParameterSpec(NodeExecutionData execution) { | |
55 return super.createValueParameterSpec(execution); | |
56 } | |
57 | |
58 @Override | |
56 public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) { | 59 public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) { |
57 MethodSpec spec = createDefaultMethodSpec(method, mirror, true, null); | 60 MethodSpec spec = createDefaultMethodSpec(method, mirror, true, null); |
58 spec.setVariableRequiredArguments(true); | 61 spec.setIgnoreAdditionalSpecifications(true); |
59 spec.getRequired().clear(); | 62 spec.getRequired().clear(); |
60 | 63 |
61 for (ActualParameter parameter : specialization.getRequiredParameters()) { | 64 for (ActualParameter parameter : specialization.getRequiredParameters()) { |
62 List<TypeMirror> assignableTypes = Utils.getAssignableTypes(getContext(), parameter.getType()); | 65 spec.addRequired(new ParameterSpec(parameter.getSpecification(), Utils.getAssignableTypes(getContext(), parameter.getType()))); |
63 ParameterSpec paramSpec = new ParameterSpec(parameter.getLocalName(), assignableTypes); | |
64 paramSpec.setSignature(true); | |
65 spec.addRequired(paramSpec); | |
66 } | 66 } |
67 | 67 |
68 return spec; | 68 return spec; |
69 } | 69 } |
70 | 70 |
78 return method.getSimpleName().toString().equals(guardName); | 78 return method.getSimpleName().toString().equals(guardName); |
79 } | 79 } |
80 | 80 |
81 @Override | 81 @Override |
82 public GuardData create(TemplateMethod method, boolean invalid) { | 82 public GuardData create(TemplateMethod method, boolean invalid) { |
83 GuardData guard = new GuardData(method, specialization, negated); | 83 return new GuardData(method, specialization, negated); |
84 /* | |
85 * Update parameters in way that parameter specifications match again the node field names | |
86 * etc. | |
87 */ | |
88 List<ActualParameter> newParameters = new ArrayList<>(); | |
89 for (ActualParameter parameter : guard.getParameters()) { | |
90 ActualParameter specializationParameter = specialization.findParameter(parameter.getSpecification().getName()); | |
91 if (specializationParameter == null) { | |
92 newParameters.add(parameter); | |
93 } else { | |
94 ActualParameter p; | |
95 if (parameter.getTypeSystemType() != null) { | |
96 p = new ActualParameter(specializationParameter.getSpecification(), parameter.getTypeSystemType(), specializationParameter.getSpecificationIndex(), | |
97 specializationParameter.getVarArgsIndex(), parameter.isImplicit()); | |
98 } else { | |
99 p = new ActualParameter(specializationParameter.getSpecification(), parameter.getType(), specializationParameter.getSpecificationIndex(), | |
100 specializationParameter.getVarArgsIndex(), parameter.isImplicit()); | |
101 } | |
102 newParameters.add(p); | |
103 } | |
104 } | |
105 guard.setParameters(newParameters); | |
106 | |
107 return guard; | |
108 } | 84 } |
109 | 85 |
110 @Override | 86 @Override |
111 public Class<? extends Annotation> getAnnotationType() { | 87 public Class<? extends Annotation> getAnnotationType() { |
112 return null; | 88 return null; |