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