Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethodParser.java @ 9220:97ad6d3e7557
Codegen API changes. Executed child nodes are now defined using @NodeChildren instead of fields.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sat, 20 Apr 2013 12:16:22 +0200 |
parents | 61ba6fc21ba4 |
children |
comparison
equal
deleted
inserted
replaced
9219:1964871a642d | 9220:97ad6d3e7557 |
---|---|
31 import javax.lang.model.type.*; | 31 import javax.lang.model.type.*; |
32 import javax.lang.model.util.*; | 32 import javax.lang.model.util.*; |
33 | 33 |
34 import com.oracle.truffle.api.codegen.*; | 34 import com.oracle.truffle.api.codegen.*; |
35 import com.oracle.truffle.codegen.processor.*; | 35 import com.oracle.truffle.codegen.processor.*; |
36 import com.oracle.truffle.codegen.processor.template.ParameterSpec.Cardinality; | 36 import com.oracle.truffle.codegen.processor.node.NodeChildData.Cardinality; |
37 import com.oracle.truffle.codegen.processor.typesystem.*; | 37 import com.oracle.truffle.codegen.processor.typesystem.*; |
38 | 38 |
39 public abstract class TemplateMethodParser<T extends Template, E extends TemplateMethod> { | 39 public abstract class TemplateMethodParser<T extends Template, E extends TemplateMethod> { |
40 | 40 |
41 private final ProcessorContext context; | 41 private final ProcessorContext context; |
224 | 224 |
225 int specificationParameterIndex = 0; | 225 int specificationParameterIndex = 0; |
226 ConsumableListIterator<ParameterSpec> required = new ConsumableListIterator<>(spec.getRequired()); | 226 ConsumableListIterator<ParameterSpec> required = new ConsumableListIterator<>(spec.getRequired()); |
227 while (required.get() != null || types.get() != null) { | 227 while (required.get() != null || types.get() != null) { |
228 if (required.get() == null || types.get() == null) { | 228 if (required.get() == null || types.get() == null) { |
229 if (required.get() != null && required.get().getCardinality() == Cardinality.MULTIPLE) { | 229 if (required.get() != null && required.get().getCardinality() == Cardinality.MANY) { |
230 required.consume(); | 230 required.consume(); |
231 specificationParameterIndex = 0; | 231 specificationParameterIndex = 0; |
232 continue; | 232 continue; |
233 } | 233 } |
234 break; | 234 break; |
235 } | 235 } |
236 boolean implicit = types.getIndex() < spec.getImplicitRequiredTypes().size(); | 236 boolean implicit = types.getIndex() < spec.getImplicitRequiredTypes().size(); |
237 ActualParameter resolvedParameter = matchParameter(required.get(), types.get(), template, specificationParameterIndex, implicit); | 237 ActualParameter resolvedParameter = matchParameter(required.get(), types.get(), template, specificationParameterIndex, implicit); |
238 if (resolvedParameter == null) { | 238 if (resolvedParameter == null) { |
239 if (required.get().getCardinality() == Cardinality.MULTIPLE) { | 239 if (required.get().getCardinality() == Cardinality.MANY) { |
240 required.consume(); | 240 required.consume(); |
241 continue; | 241 continue; |
242 } | 242 } |
243 // direct mismatch but required -> error | 243 // direct mismatch but required -> error |
244 return null; | 244 return null; |
246 parsedParams.add(resolvedParameter); | 246 parsedParams.add(resolvedParameter); |
247 types.consume(); | 247 types.consume(); |
248 if (required.get().getCardinality() == Cardinality.ONE) { | 248 if (required.get().getCardinality() == Cardinality.ONE) { |
249 required.consume(); | 249 required.consume(); |
250 specificationParameterIndex = 0; | 250 specificationParameterIndex = 0; |
251 } else if (required.get().getCardinality() == Cardinality.MULTIPLE) { | 251 } else if (required.get().getCardinality() == Cardinality.MANY) { |
252 specificationParameterIndex++; | 252 specificationParameterIndex++; |
253 } | 253 } |
254 } | 254 } |
255 } | 255 } |
256 | 256 |