From c8afa9d7ca49b8274a46c8f43996ef0cb6bb49e5 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Sat, 22 Aug 2015 15:26:51 -0700 Subject: [PATCH] serialize/quote fixes for ..n variables --- .../com/oracle/truffle/r/nodes/builtin/base/Quote.java | 3 +++ .../src/com/oracle/truffle/r/nodes/RASTUtils.java | 10 ++++++++-- .../r/nodes/access/ReadVariadicComponentNode.java | 9 ++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Quote.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Quote.java index 4c660421ab..79696556bb 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Quote.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Quote.java @@ -39,6 +39,7 @@ public abstract class Quote extends RBuiltinNode { public abstract Object execute(VirtualFrame frame, RPromise expr); private final ConditionProfile rvn = ConditionProfile.createBinaryProfile(); + private final ConditionProfile rvcn = ConditionProfile.createBinaryProfile(); private final ConditionProfile cn = ConditionProfile.createBinaryProfile(); @Specialization @@ -57,6 +58,8 @@ public abstract class Quote extends RBuiltinNode { } else if (cn.profile(unode instanceof ConstantNode)) { ConstantNode cnode = (ConstantNode) unode; return cnode.getValue(); + } else if (rvcn.profile(unode instanceof ReadVariadicComponentNode)) { + return RASTUtils.createRSymbol(unode); } else { return RDataFactory.createLanguage(unode); } 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 00acaa92df..71b41c4f2e 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 @@ -106,11 +106,17 @@ public class RASTUtils { } /** - * Creates an {@link RSymbol} from a {@link ReadVariableNode}. + * Creates an {@link RSymbol} from a {@link ReadVariableNode} o + * {@link ReadVariadicComponentNode}. */ @TruffleBoundary public static RSymbol createRSymbol(Node readVariableNode) { - return RDataFactory.createSymbol(((ReadVariableNode) readVariableNode).getIdentifier()); + if (readVariableNode instanceof ReadVariadicComponentNode) { + ReadVariadicComponentNode rvcn = (ReadVariadicComponentNode) readVariableNode; + return RDataFactory.createSymbol(rvcn.getPrintForm()); + } else { + return RDataFactory.createSymbol(((ReadVariableNode) readVariableNode).getIdentifier()); + } } /** diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java index 60c3e761e3..c33a7095da 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java @@ -84,11 +84,14 @@ public class ReadVariadicComponentNode extends RNode implements RSyntaxNode { return ret == null ? RMissing.instance : ret; } + public String getPrintForm() { + return ".." + Integer.toString(index + 1); + } + @Override public void deparseImpl(State state) { state.startNodeDeparse(this); - state.append(".."); - state.append(Integer.toString(index + 1)); + state.append(getPrintForm()); state.endNodeDeparse(this); } @@ -97,6 +100,6 @@ public class ReadVariadicComponentNode extends RNode implements RSyntaxNode { } public void serializeImpl(com.oracle.truffle.r.runtime.RSerialize.State state) { - throw RInternalError.unimplemented(); + state.setCarAsSymbol(getPrintForm()); } } -- GitLab