Mercurial > hg > graal-compiler
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<>(); |