Mercurial > hg > truffle
diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/SpecializationMethodParser.java @ 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 | 5f3cba05c2fa |
children | 6ad077b60cb3 |
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; }