From 6ace924532897a32e2d55241b5fd230bed33a521 Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Thu, 22 Oct 2015 09:48:48 -0700 Subject: [PATCH] fix bug for length 0/1 blocks deparse --- .../truffle/r/nodes/control/BlockNode.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java index d6be70e150..9f0e489030 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java @@ -79,7 +79,8 @@ public class BlockNode extends SequenceNode implements RSyntaxNode, VisibilityCo @Override public void deparseImpl(RDeparse.State state) { state.startNodeDeparse(this); - if (sequence.length > 1) { + // empty deparses as {} + if (sequence.length != 1) { state.writeOpenCurlyNLIncIndent(); } for (int i = 0; i < sequence.length; i++) { @@ -91,7 +92,7 @@ public class BlockNode extends SequenceNode implements RSyntaxNode, VisibilityCo state.mark(); // in case last } } - if (sequence.length > 1) { + if (sequence.length != 1) { state.decIndentWriteCloseCurly(); } state.endNodeDeparse(this); @@ -138,10 +139,15 @@ public class BlockNode extends SequenceNode implements RSyntaxNode, VisibilityCo /* * We can't get this completely compatible with GnuR without knowing if the source had a "{" * or not. However, semantically what really matters is that if the length is > 1, there - * *must* have been a "{", so we fabricate it. + * *must* have been a "{", so we fabricate it. Furthermore, if length==1, then we must + * delegate to the underlying node */ int len = getSequence().length; - return len == 1 ? 1 : len + 1; + if (len == 1) { + return getSequence()[0].asRSyntaxNode().getRlengthImpl(); + } else { + return len + 1; + } } @Override @@ -156,7 +162,7 @@ public class BlockNode extends SequenceNode implements RSyntaxNode, VisibilityCo return RASTUtils.createLanguageElement(seq[index - 1]); } } else { - return RASTUtils.createLanguageElement(seq[0]); + return getSequence()[0].asRSyntaxNode().getRelementImpl(index); } } -- GitLab