Mercurial > hg > graal-jvmci-8
changeset 11554:5d5007c9a5aa
Truffle-DSL: fixed a if bug target parameters and executes accidently do not match.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sun, 08 Sep 2013 13:16:12 +0200 |
parents | 8a2664ad5c55 |
children | 8d52ef9ab876 |
files | graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java |
diffstat | 1 files changed, 13 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Mon Sep 09 17:36:25 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Sun Sep 08 13:16:12 2013 +0200 @@ -2003,6 +2003,10 @@ startCallTypeSystemMethod(getContext(), builder, child.getNodeData(), cast.getMethodName()); } + if (targetExecutable.getType().needsCastTo(context, targetParameter.getTypeSystemType()) && cast == null) { + startCallTypeSystemMethod(getContext(), builder, child.getNodeData(), TypeSystemCodeGenerator.expectTypeMethodName(targetParameter.getTypeSystemType())); + } + NodeData node = getModel().getNode(); ActualParameter sourceParameter = sourceExecutable.findParameter(targetParameter.getLocalName()); if (sourceParameter == null) { @@ -2011,6 +2015,11 @@ CodeTree var = CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter)); builder.tree(createExpectExecutableType(node, sourceParameter.getTypeSystemType(), targetExecutable, var)); } + + if (targetExecutable.getType().needsCastTo(context, targetParameter.getTypeSystemType())) { + builder.end().end(); + } + if (cast != null) { builder.end().end(); } @@ -2049,6 +2058,10 @@ } private boolean hasUnexpectedType(ExecutableTypeData target, ActualParameter sourceParameter, TypeData type) { + boolean targetCast = target.getType().needsCastTo(context, type); + if (targetCast && getModel().getNode().getTypeSystem().lookupCast(target.getType(), type) == null) { + return true; + } if (sourceParameter == null) { return target.hasUnexpectedValue(getContext()); } else {