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;