# HG changeset patch # User Christian Humer # Date 1370284130 -7200 # Node ID a5d3e0973e835f3fc7dc0bfaf2dcb7be127961f4 # Parent 931f9ced42ad08fc971d31ccfd8c3f0c88d0c216 Fixed @Specialization#executeWith order was ignored. diff -r 931f9ced42ad -r a5d3e0973e83 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java Mon Jun 03 18:27:43 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java Mon Jun 03 20:28:50 2013 +0200 @@ -1843,19 +1843,29 @@ builder.startCall(execType.getMethodName()); - List signatureParameters = getModel().getSignatureParameters(); int index = 0; for (ActualParameter parameter : execType.getParameters()) { if (!parameter.getSpecification().isSignature()) { builder.string(parameter.getLocalName()); } else { - if (index < signatureParameters.size()) { - ActualParameter specializationParam = signatureParameters.get(index); + if (index < targetField.getExecuteWith().size()) { + NodeChildData child = targetField.getExecuteWith().get(index); + + ParameterSpec spec = getModel().getSpecification().findParameterSpec(child.getName()); + List specializationParams = getModel().findParameters(spec); + + if (specializationParams.isEmpty()) { + builder.defaultValue(parameter.getType()); + continue; + } + + ActualParameter specializationParam = specializationParams.get(0); TypeData targetType = parameter.getTypeSystemType(); TypeData sourceType = specializationParam.getTypeSystemType(); String localName = specializationParam.getLocalName(); + if (unexpectedParameter != null && unexpectedParameter.getLocalName().equals(specializationParam.getLocalName())) { localName = "ex.getResult()"; sourceType = getModel().getNode().getTypeSystem().getGenericTypeData(); diff -r 931f9ced42ad -r a5d3e0973e83 graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java --- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java Mon Jun 03 18:27:43 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethod.java Mon Jun 03 20:28:50 2013 +0200 @@ -133,6 +133,16 @@ return parameters; } + public List findParameters(ParameterSpec spec) { + List foundParameters = new ArrayList<>(); + for (ActualParameter param : getReturnTypeAndParameters()) { + if (param.getSpecification().equals(spec)) { + foundParameters.add(param); + } + } + return foundParameters; + } + public ActualParameter findParameter(String valueName) { for (ActualParameter param : getReturnTypeAndParameters()) { if (param.getLocalName().equals(valueName)) {