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;