From e9b27e01220ad00f8afa453eba7bd26a2fcd5c5e Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Fri, 17 Apr 2015 16:17:21 -0700 Subject: [PATCH] fix for match.call crash with VarArgNode --- .../src/com/oracle/truffle/r/nodes/RASTUtils.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java index 6a67896121..23298349db 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java @@ -160,8 +160,14 @@ public class RASTUtils { RLanguage l = (RLanguage) value; return (RNode) NodeUtil.cloneNode((Node) l.getRep()); } else if (value instanceof RPromise) { - // TODO: flatten nested promises? - return NodeUtil.cloneNode(((RNode) ((RPromise) value).getRep()).unwrap()); + RPromise promise = (RPromise) value; + RNode promiseRep = ((RNode) ((RPromise) value).getRep()).unwrap(); + if (promiseRep instanceof VarArgNode) { + VarArgNode varArgNode = (VarArgNode) promiseRep; + RPromise varArgPromise = varArgNode.executeNonEvaluated((VirtualFrame) promise.getFrame()); + return createNodeForValue(varArgPromise); + } + return NodeUtil.cloneNode(promiseRep); } else { return ConstantNode.create(value); } -- GitLab