Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java @ 19292:906367e494ca
Truffle-DSL: fix invalid parameter order for executeWith with non-linear execution.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 11 Feb 2015 12:13:44 +0100 |
parents | c0fb70634640 |
children |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java Wed Feb 11 12:13:44 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java Wed Feb 11 12:13:44 2015 +0100 @@ -36,9 +36,11 @@ public class ExecutableTypeMethodParser extends NodeMethodParser<ExecutableTypeData> { private final List<TypeMirror> frameTypes; + private final NodeChildData child; - public ExecutableTypeMethodParser(ProcessorContext context, NodeData node, List<TypeMirror> frameTypes) { + public ExecutableTypeMethodParser(ProcessorContext context, NodeData node, NodeChildData child, List<TypeMirror> frameTypes) { super(context, node); + this.child = child; this.frameTypes = frameTypes; setParseNullOnError(false); getParser().setEmitErrors(false); @@ -54,9 +56,19 @@ TypeSystemData typeSystem = getNode().getTypeSystem(); List<TypeMirror> allowedTypes = typeSystem.getPrimitiveTypeMirrors(); Set<String> allowedIdentifiers = typeSystem.getTypeIdentifiers(); - for (ParameterSpec originalSpec : requiredSpecs) { - spec.addRequired(new ParameterSpec(originalSpec, allowedTypes, allowedIdentifiers)); + + if (child != null) { + for (NodeExecutionData executeWith : child.getExecuteWith()) { + ParameterSpec parameter = spec.addRequired(new ParameterSpec(executeWith.getName(), allowedTypes, allowedIdentifiers)); + parameter.setExecution(executeWith); + parameter.setSignature(true); + } + } else { + for (ParameterSpec originalSpec : requiredSpecs) { + spec.addRequired(new ParameterSpec(originalSpec, allowedTypes, allowedIdentifiers)); + } } + spec.setIgnoreAdditionalSpecifications(true); spec.setIgnoreAdditionalParameters(true); spec.setVariableRequiredParameters(true);