Mercurial > hg > graal-jvmci-8
comparison 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 |
comparison
equal
deleted
inserted
replaced
11438:b77721210bd6 | 11439:efe58aa92f86 |
---|---|
24 | 24 |
25 import java.lang.annotation.*; | 25 import java.lang.annotation.*; |
26 import java.util.*; | 26 import java.util.*; |
27 | 27 |
28 import javax.lang.model.element.*; | 28 import javax.lang.model.element.*; |
29 import javax.lang.model.type.*; | |
29 | 30 |
30 import com.oracle.truffle.dsl.processor.*; | 31 import com.oracle.truffle.dsl.processor.*; |
31 import com.oracle.truffle.dsl.processor.node.*; | 32 import com.oracle.truffle.dsl.processor.node.*; |
32 import com.oracle.truffle.dsl.processor.template.*; | 33 import com.oracle.truffle.dsl.processor.template.*; |
33 | 34 |
56 MethodSpec spec = createDefaultMethodSpec(method, mirror, true, null); | 57 MethodSpec spec = createDefaultMethodSpec(method, mirror, true, null); |
57 spec.setVariableRequiredArguments(true); | 58 spec.setVariableRequiredArguments(true); |
58 spec.getRequired().clear(); | 59 spec.getRequired().clear(); |
59 | 60 |
60 for (ActualParameter parameter : specialization.getRequiredParameters()) { | 61 for (ActualParameter parameter : specialization.getRequiredParameters()) { |
61 ParameterSpec paramSpec = new ParameterSpec(parameter.getLocalName(), parameter.getType(), getNode().getTypeSystem().getGenericType()); | 62 List<TypeMirror> assignableTypes = Utils.getAssignableTypes(getContext(), parameter.getType()); |
63 ParameterSpec paramSpec = new ParameterSpec(parameter.getLocalName(), assignableTypes); | |
62 paramSpec.setSignature(true); | 64 paramSpec.setSignature(true); |
63 spec.addRequired(paramSpec); | 65 spec.addRequired(paramSpec); |
64 } | 66 } |
65 | 67 |
66 return spec; | 68 return spec; |
87 for (ActualParameter parameter : guard.getParameters()) { | 89 for (ActualParameter parameter : guard.getParameters()) { |
88 ActualParameter specializationParameter = specialization.findParameter(parameter.getSpecification().getName()); | 90 ActualParameter specializationParameter = specialization.findParameter(parameter.getSpecification().getName()); |
89 if (specializationParameter == null) { | 91 if (specializationParameter == null) { |
90 newParameters.add(parameter); | 92 newParameters.add(parameter); |
91 } else { | 93 } else { |
92 newParameters.add(new ActualParameter(specializationParameter.getSpecification(), parameter.getTypeSystemType(), specializationParameter.getIndex(), parameter.isImplicit())); | 94 ActualParameter p; |
95 if (parameter.getTypeSystemType() != null) { | |
96 p = new ActualParameter(specializationParameter.getSpecification(), parameter.getTypeSystemType(), specializationParameter.getIndex(), parameter.isImplicit()); | |
97 } else { | |
98 p = new ActualParameter(specializationParameter.getSpecification(), parameter.getType(), specializationParameter.getIndex(), parameter.isImplicit()); | |
99 } | |
100 newParameters.add(p); | |
93 } | 101 } |
94 } | 102 } |
95 guard.setParameters(newParameters); | 103 guard.setParameters(newParameters); |
96 | 104 |
97 return guard; | 105 return guard; |