changeset 7792:39d4a79568b6

Fixed guard declarations can also have zero parameters as well as a mismatching frame signature.
author Christian Humer <christian.humer@gmail.com>
date Fri, 15 Feb 2013 11:53:04 +0100
parents 550c952f5d3f
children 8b48c8ebdff4
files graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java
diffstat 2 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java	Tue Feb 12 16:06:20 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java	Fri Feb 15 11:53:04 2013 +0100
@@ -157,17 +157,24 @@
     private static boolean isGuardCompatible(SpecializationData specialization, GuardData guard) {
         Iterator<ActualParameter> guardParameters = Arrays.asList(guard.getParameters()).iterator();
         for (ActualParameter param : specialization.getParameters()) {
+            if (param.getSpecification().isOptional()) {
+                continue;
+            }
             if (!guardParameters.hasNext()) {
                 return false;
             }
             ActualParameter guardParam = guardParameters.next();
-            if (!Utils.typeEquals(guardParam.getActualType(), param.getActualType())) {
+            if (!Utils.typeEquals(guardParam.getActualType(), param.getActualType()) && !guardParam.getSpecification().isOptional()) {
                 return false;
             }
         }
-        if (guardParameters.hasNext()) {
-            return false;
+        while (guardParameters.hasNext()) {
+            ActualParameter param = guardParameters.next();
+            if (!param.getSpecification().isOptional()) {
+                return false;
+            }
         }
+
         return true;
     }
 
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Tue Feb 12 16:06:20 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java	Fri Feb 15 11:53:04 2013 +0100
@@ -44,7 +44,6 @@
     @Override
     public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) {
         List<ParameterSpec> specs = new ArrayList<>();
-        specs.add(new ParameterSpec("value1", typeSystem, false, Cardinality.ONE));
         specs.add(new ParameterSpec("valueN", typeSystem, false, Cardinality.MULTIPLE));
         ParameterSpec returnTypeSpec = new ParameterSpec("returnType", getContext().getType(boolean.class), false);
         return new MethodSpec(returnTypeSpec, specs);