From db7cd2aef8b9912e6a359309e5f4eff254cfa873 Mon Sep 17 00:00:00 2001 From: Michael Haupt <michael.haupt@oracle.com> Date: Tue, 28 Jan 2014 15:53:08 +0100 Subject: [PATCH] refactor list pretty-printing, support deeper nesting levels --- .../nodes/builtin/base/PrettyPrinterNode.java | 34 ++++--------------- .../truffle/r/test/ExpectedTestOutput.test | 33 ++++++++++++++++++ .../r/test/simple/TestSimpleBuiltins.java | 1 + 3 files changed, 40 insertions(+), 28 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java index 7e4c08e898..817cad3288 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java @@ -351,33 +351,11 @@ public abstract class PrettyPrinterNode extends RNode { @SlowPath @Specialization(order = 1000, guards = "!isMatrix") public String prettyPrint(VirtualFrame frame, RList operand) { - int length = operand.getLength(); - if (length == 0) { - return "list()"; - } else { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - if (isPrintingAttributes() && operand.elementNamePrefix != null) { - sb.append(operand.elementNamePrefix); - } - Object name = operand.getNameAt(i); - sb.append(name).append('\n'); - Object value = operand.getDataAt(i); - sb.append(printSingleListValue(frame, value, name)).append("\n\n"); - } - String result = sb.deleteCharAt(sb.length() - 1).toString(); - Map<String, Object> attributes = operand.getAttributes(); - if (attributes != null) { - result = result + printAttributes(frame, operand, attributes); - } - return result; - - } + return prettyPrintList0(frame, operand, null); } - // TODO refactor: too much code reuse // FIXME support nesting levels >1 - public String prettyPrintNestedList(VirtualFrame frame, RList operand, Object listName) { + private String prettyPrintList0(VirtualFrame frame, RList operand, Object listName) { int length = operand.getLength(); if (length == 0) { return "list()"; @@ -386,10 +364,11 @@ public abstract class PrettyPrinterNode extends RNode { for (int i = 0; i < length; i++) { if (isPrintingAttributes() && operand.elementNamePrefix != null) { sb.append(operand.elementNamePrefix); - } else { - sb.append(listName); } Object name = operand.getNameAt(i); + if (listName != null) { + name = new StringBuilder(listName.toString()).append(name).toString(); + } sb.append(name).append('\n'); Object value = operand.getDataAt(i); sb.append(printSingleListValue(frame, value, name)).append("\n\n"); @@ -400,7 +379,6 @@ public abstract class PrettyPrinterNode extends RNode { result = result + printAttributes(frame, operand, attributes); } return result; - } } @@ -486,7 +464,7 @@ public abstract class PrettyPrinterNode extends RNode { } if (RTYPES.isRList(argumentsValue0)) { RList argumentsValue0Cast = RTYPES.asRList(argumentsValue0); - return prettyPrintNestedList(frame, argumentsValue0Cast, listElementName); + return prettyPrintList0(frame, argumentsValue0Cast, listElementName); } if (RTYPES.isRInvisible(argumentsValue0)) { RInvisible argumentsValue0Cast = RTYPES.asRInvisible(argumentsValue0); diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index 042844220d..1e5f2f623f 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -4926,6 +4926,39 @@ character(0) [1] 3 +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testPrint +#{ print(list(list(list(1,2),list(3)),list(list(4),list(5,6)))) } +[[1]] +[[1]][[1]] +[[1]][[1]][[1]] +[1] 1 + +[[1]][[1]][[2]] +[1] 2 + + +[[1]][[2]] +[[1]][[2]][[1]] +[1] 3 + + + +[[2]] +[[2]][[1]] +[[2]][[1]][[1]] +[1] 4 + + +[[2]][[2]] +[[2]][[2]][[1]] +[1] 5 + +[[2]][[2]][[2]] +[1] 6 + + + + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testPrint #{ x<-c("11", "7", "2222", "7", "33"); names(x)<-1:5; print(x) } 1 2 3 4 5 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java index 6871746a87..1d2cfa5d93 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java @@ -2267,6 +2267,7 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ x<-c(11, 7, 2222, 7, 33); print(x) }"); assertEval("{ x<-c(\"11\", \"7\", \"2222\", \"7\", \"33\"); names(x)<-1:5; print(x) }"); assertEval("{ x<-c(11, 7, 2222, 7, 33); names(x)<-1:5; print(x) }"); + assertEval("{ print(list(list(list(1,2),list(3)),list(list(4),list(5,6)))) }"); } @Test -- GitLab