# HG changeset patch # User Christian Humer # Date 1360943302 -3600 # Node ID 8b48c8ebdff448bcdfc5ecf1b41c617e161126b0 # Parent 39d4a79568b646997e1b0e1fb74f9e3f581c2c68# Parent fe1187115167bffb09f05fb9c4393ead01086855 Merge diff -r fe1187115167 -r 8b48c8ebdff4 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java Fri Feb 15 15:04:58 2013 +0100 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java Fri Feb 15 16:48:22 2013 +0100 @@ -157,17 +157,24 @@ private static boolean isGuardCompatible(SpecializationData specialization, GuardData guard) { Iterator 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; } diff -r fe1187115167 -r 8b48c8ebdff4 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java Fri Feb 15 15:04:58 2013 +0100 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/typesystem/GuardParser.java Fri Feb 15 16:48:22 2013 +0100 @@ -44,7 +44,6 @@ @Override public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) { List 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);