diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/R/datetime_overrides.R b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/R/datetime_overrides.R new file mode 100644 index 0000000000000000000000000000000000000000..d59f59e1da7eb2546ee7060458511448ccbca88b --- /dev/null +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/R/datetime_overrides.R @@ -0,0 +1,32 @@ +# File src/library/base/R/datetime.R +# Part of the R package, http://www.R-project.org +# +# Copyright (C) 1995-2014 The R Core Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# A copy of the GNU General Public License is available at +# http://www.r-project.org/Licenses/ + +# TODO fix the problem with .POSIXct - the following implementations +# of format are obviously wrong but it's better than raising an exception +# whenever Sys.time() is called (and it's mostly used for printing timestamps) + +format.POSIXlt <- function(x, format = "", usetz = FALSE, ...) +{ + format.default(x) +} + +format.POSIXct <- function(x, format = "", tz = "", usetz = FALSE, ...) +{ + format.default(x) +} + diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java index 2d3a4a50ec957219db31cb192e5c619fa86d8080..49cfff91db704137beebe016b2e2d9fbb5d27aa1 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java @@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.ops.na.*; public abstract class Transpose extends RBuiltinNode { private final RAttributeProfiles attrProfiles = RAttributeProfiles.create(); + private final BranchProfile hasDimNamesProfile = BranchProfile.create(); private final NACheck check = NACheck.create(); @@ -96,6 +97,7 @@ public abstract class Transpose extends RBuiltinNode { RIntVector r = RDataFactory.createIntVector(result, vector.isComplete()); r.copyAttributesFrom(attrProfiles, vector); r.setDimensions(newDim); + setDimNames(r, vector); return r; } @@ -121,6 +123,7 @@ public abstract class Transpose extends RBuiltinNode { RDoubleVector r = RDataFactory.createDoubleVector(result, vector.isComplete()); r.copyAttributesFrom(attrProfiles, vector); r.setDimensions(newDim); + setDimNames(r, vector); return r; } @@ -146,9 +149,19 @@ public abstract class Transpose extends RBuiltinNode { RStringVector r = RDataFactory.createStringVector(result, vector.isComplete()); r.copyAttributesFrom(attrProfiles, vector); r.setDimensions(newDim); + setDimNames(r, vector); return r; } + private void setDimNames(RVector newVector, RAbstractVector oldVector) { + RList dimNames = oldVector.getDimNames(attrProfiles); + if (dimNames != null) { + hasDimNamesProfile.enter(); + assert dimNames.getLength() == 2; + newVector.setDimNames(RDataFactory.createList(new Object[]{dimNames.getDataAt(1), dimNames.getDataAt(0)})); + } + } + protected static boolean isEmpty2D(RAbstractVector vector) { if (!vector.hasDimensions()) { return false; 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 cc52af6946a53429ef44271594db332ede820157..f79e687fbabbdaa6215a4e884dc929b85097d67d 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 @@ -5054,6 +5054,9 @@ character(0) #{ as.character(list(list(c("hello", "hi")))) } [1] "list(c(\"hello\", \"hi\"))" +##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testAsCharacter +#{ x<-as.character(Sys.time()) } + ##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testAsComplex #{ as.complex("+.1e+2-3i") } [1] 10-3i @@ -17412,6 +17415,12 @@ $a [,1] [,2] [,3] [1,] 1 2 3 +##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testTranspose +#{ x<-matrix(1:2, ncol=2, dimnames=list("a", c("b", "c"))); t(x) } + a +b 1 +c 2 + ##com.oracle.truffle.r.test.library.base.TestSimpleBuiltins.testTriangular #{ m <- { matrix( (1:6) * (1+3i), nrow=2 ) } ; diag(m) <- c(1,2) ; m } [,1] [,2] [,3] 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 d8ac877e5a99c3639c6e41224c01dbb249162fc0..bbeb7660c62ea79749c697f2139c0c61c4bf943f 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 @@ -730,6 +730,8 @@ public class TestSimpleBuiltins extends TestBase { assertEval(Ignored.Unknown, "{ as.character(list(list(c(\"hello\", \"hi\")))) }"); assertEval(Ignored.Unknown, "{ as.character(list(c(2L, 3L))) }"); assertEval(Ignored.Unknown, "{ as.character(list(c(2L, 3L, 5L))) }"); + + assertEval("{ x<-as.character(Sys.time()) }"); } @Test @@ -2081,6 +2083,8 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ t(t(matrix(1:6, nrow=2))) }"); assertEval("{ t(matrix(1:4, nrow=2)) }"); assertEval("{ t(t(matrix(1:4, nrow=2))) }"); + + assertEval("{ x<-matrix(1:2, ncol=2, dimnames=list(\"a\", c(\"b\", \"c\"))); t(x) }"); } //@formatter:off