From b12e3f66d5bef08dddb7590fa858ec8c6b7cc91d Mon Sep 17 00:00:00 2001 From: Adam Welc <adam.welc@oracle.com> Date: Fri, 22 May 2015 07:37:12 -0700 Subject: [PATCH] A fix to string conversion for RLanguage objects. --- .../com/oracle/truffle/r/nodes/unary/CastStringNode.java | 8 +++++++- .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 8 ++++++++ .../truffle/r/test/library/base/TestSimpleBuiltins.java | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java index b2152f6172..8cdf807f92 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java @@ -23,6 +23,7 @@ package com.oracle.truffle.r.nodes.unary; import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.r.runtime.*; import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; @@ -95,7 +96,12 @@ public abstract class CastStringNode extends CastNode { String[] sdata = new String[operand.getLength()]; // conversions to character will not introduce new NAs for (int i = 0; i < operand.getLength(); i++) { - sdata[i] = toString(operand.getDataAtAsObject(i)); + Object o = operand.getDataAtAsObject(i); + if (o instanceof RLanguage) { + sdata[i] = RDeparse.deparseForPrint(o); + } else { + sdata[i] = toString(o); + } } RStringVector ret = RDataFactory.createStringVector(sdata, operand.isComplete(), getPreservedDimensions(operand), getPreservedNames(operand)); preserveDimensionNames(operand, ret); 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 0a58cb06bf..9788e3a7fc 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 @@ -5059,6 +5059,14 @@ character(0) #{ as.character(list(list(c("hello", "hi")))) } [1] "list(c(\"hello\", \"hi\"))" +##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testAsCharacter +#{ f1<-function() 7; f2<-function(x) { sys.call() }; as.character(f2(f1())) } +[1] "f2" "f1()" + +##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testAsCharacter +#{ f1<-function(x) 7; f2<-function(y) { sys.call() }; as.character(f2(f1(42))) } +[1] "f2" "f1(42)" + ##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testAsCharacter #{ f<-function(x) { sys.call() }; as.character(f(7)) } [1] "f" "7" diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java index e928e3469e..fdde461a0c 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java @@ -742,6 +742,9 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ x<-as.character(Sys.time()) }"); assertEval("{ f<-function(x) { sys.call() }; as.character(f(7)) }"); + + assertEval("{ f1<-function() 7; f2<-function(x) { sys.call() }; as.character(f2(f1())) }"); + assertEval("{ f1<-function(x) 7; f2<-function(y) { sys.call() }; as.character(f2(f1(42))) }"); } @Test -- GitLab