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 6a678961218941ac8173138135ff3def58671eba..23298349dbef5ced6e5b809b595f2f424cd3b9f1 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); }