diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java @ 8592:a80bf36c6a1e

Refactor to shared template method signature comparison.
author Christian Humer <christian.humer@gmail.com>
date Mon, 01 Apr 2013 11:52:38 +0200
parents 703c09f8640c
children 54e227b2e199
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Fri Mar 29 21:39:54 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Mon Apr 01 11:52:38 2013 +0200
@@ -29,16 +29,18 @@
 import javax.lang.model.type.*;
 
 import com.oracle.truffle.codegen.processor.*;
+import com.oracle.truffle.codegen.processor.node.*;
 import com.oracle.truffle.codegen.processor.template.*;
-import com.oracle.truffle.codegen.processor.template.ParameterSpec.Cardinality;
 
 public class GuardParser extends TemplateMethodParser<Template, GuardData> {
 
-    private final TypeSystemData typeSystem;
+    private final SpecializationData specialization;
+    private final String guardName;
 
-    public GuardParser(ProcessorContext context, Template template, TypeSystemData typeSystem) {
-        super(context, template);
-        this.typeSystem = typeSystem;
+    public GuardParser(ProcessorContext context, SpecializationData specialization, String guardName) {
+        super(context, specialization.getNode());
+        this.specialization = specialization;
+        this.guardName = guardName;
         setEmitErrors(false);
         setParseNullOnError(false);
     }
@@ -46,14 +48,16 @@
     @Override
     public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) {
         List<ParameterSpec> specs = new ArrayList<>();
-        specs.add(new ParameterSpec("valueN", typeSystem, false, Cardinality.MULTIPLE));
-        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class), false);
+        for (ActualParameter parameter : specialization.getParameters()) {
+            specs.add(new ParameterSpec(parameter.getSpecification().getName(), parameter.getActualType(), true, true));
+        }
+        ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class), false, false);
         return new MethodSpec(Collections.<TypeMirror> emptyList(), returnTypeSpec, specs);
     }
 
     @Override
     public boolean isParsable(ExecutableElement method) {
-        return true;
+        return method.getSimpleName().toString().equals(guardName);
     }
 
     @Override