comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/typesystem/GuardParser.java @ 11190:4eb23800c907

Truffle-DSL: Implemented support for negated guards (GRAAL-371 #resolve)
author Christian Humer <christian.humer@gmail.com>
date Wed, 31 Jul 2013 15:36:01 +0200
parents 79041ab43660
children efe58aa92f86
comparison
equal deleted inserted replaced
11189:8ce168d68d49 11190:4eb23800c907
33 33
34 public class GuardParser extends NodeMethodParser<GuardData> { 34 public class GuardParser extends NodeMethodParser<GuardData> {
35 35
36 private final SpecializationData specialization; 36 private final SpecializationData specialization;
37 private final String guardName; 37 private final String guardName;
38 private final boolean negated;
38 39
39 public GuardParser(ProcessorContext context, SpecializationData specialization, String guardName) { 40 public GuardParser(ProcessorContext context, SpecializationData specialization, String guardDefinition) {
40 super(context, specialization.getNode()); 41 super(context, specialization.getNode());
41 this.specialization = specialization; 42 this.specialization = specialization;
42 this.guardName = guardName; 43 if (guardDefinition.startsWith("!")) {
44 this.guardName = guardDefinition.substring(1, guardDefinition.length());
45 this.negated = true;
46 } else {
47 this.guardName = guardDefinition;
48 this.negated = false;
49 }
43 setEmitErrors(false); 50 setEmitErrors(false);
44 setParseNullOnError(false); 51 setParseNullOnError(false);
45 } 52 }
46 53
47 @Override 54 @Override
69 return method.getSimpleName().toString().equals(guardName); 76 return method.getSimpleName().toString().equals(guardName);
70 } 77 }
71 78
72 @Override 79 @Override
73 public GuardData create(TemplateMethod method) { 80 public GuardData create(TemplateMethod method) {
74 GuardData guard = new GuardData(method, specialization); 81 GuardData guard = new GuardData(method, specialization, negated);
75 /* 82 /*
76 * Update parameters in way that parameter specifications match again the node field names 83 * Update parameters in way that parameter specifications match again the node field names
77 * etc. 84 * etc.
78 */ 85 */
79 List<ActualParameter> newParameters = new ArrayList<>(); 86 List<ActualParameter> newParameters = new ArrayList<>();