Mercurial > hg > graal-compiler
changeset 9536:238431ec62a2
Fixed bug in casting execute generation when evaluated parameters for both executed methods were not mapped to a child node.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Fri, 03 May 2013 14:28:32 +0200 |
parents | 2777aafe689b |
children | e2965e5cd474 |
files | graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java |
diffstat | 1 files changed, 13 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java Thu May 02 21:28:13 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java Fri May 03 14:28:32 2013 +0200 @@ -1460,8 +1460,7 @@ List<ActualParameter> executeParameters = new ArrayList<>(); for (ActualParameter sourceParameter : executable.getParameters()) { - NodeChildData field = specialization.getNode().findChild(sourceParameter.getSpecification().getName()); - if (field == null) { + if (!sourceParameter.getSpecification().isSignature()) { continue; } @@ -1645,21 +1644,24 @@ for (ActualParameter targetParameter : targetParameters) { NodeChildData field = sourceNode.findChild(targetParameter.getSpecification().getName()); - if (field == null) { + if (!targetParameter.getSpecification().isSignature()) { continue; } + TypeData targetType = targetParameter.getTypeSystemType(); - - ExecutableTypeData targetExecutable = field.findExecutableType(getContext(), targetType); + ExecutableTypeData targetExecutable = null; + if (field != null) { + targetExecutable = field.findExecutableType(getContext(), targetType); + } ActualParameter sourceParameter = sourceExecutable.findParameter(targetParameter.getLocalName()); String targetVariableName = valueName(targetParameter); CodeTree executionExpression = null; - if (cast || sourceParameter != null) { + if ((sourceParameter != null && cast) || sourceParameter != null) { TypeData sourceType = sourceParameter.getTypeSystemType(); - if (!sourceType.needsCastTo(getContext(), targetType)) { - if (field.isShortCircuit() && sourceParameter != null) { + if (targetExecutable == null || !sourceType.needsCastTo(getContext(), targetType)) { + if (field != null && field.isShortCircuit() && sourceParameter != null) { builder.tree(createShortCircuitValue(builder, specialization, field, targetParameter.getPreviousParameter(), unexpectedParameter)); } builder.startStatement(); @@ -1667,8 +1669,10 @@ builder.string(valueName(targetParameter)).string(" = "); builder.tree(CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter))); builder.end(); + continue; } else { - executionExpression = createExpectExecutableType(sourceNode, sourceType, targetExecutable, CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter))); + CodeTree valueTree = CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter)); + executionExpression = createExpectExecutableType(sourceNode, sourceType, targetExecutable, valueTree); } } else if (sourceParameter == null) { executionExpression = createExecuteChildExpression(builder, field, targetParameter, unexpectedParameter);