diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index 568a837e407f11b28d3c0e5df95060ddc33e37e5..5f695cded947ce4a5346201257ddf9536927a3d5 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -85,6 +85,7 @@ public class BasePackage extends RPackage { load(CumSum.class); load(Diag.class); load(Dim.class); + load(DimNames.class); load(DoubleBuiltin.class); load(EmptyEnv.class); load(Exists.class); @@ -167,6 +168,7 @@ public class BasePackage extends RPackage { load(UpdateAttributes.class); load(UpdateDiag.class); load(UpdateDim.class); + load(UpdateDimNames.class); load(UpdateLength.class); load(UpdateNames.class); load(UpperTri.class); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java new file mode 100644 index 0000000000000000000000000000000000000000..2b81dd39e7a5db5c797e83ed73f44385b4006486 --- /dev/null +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/DimNames.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.nodes.builtin.base; + +import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.r.nodes.builtin.*; +import com.oracle.truffle.r.runtime.data.*; +import com.oracle.truffle.r.runtime.data.model.*; + +@RBuiltin("dimnames") +public abstract class DimNames extends RBuiltinNode { + + @Specialization + public RNull getDimNames(RNull operand) { + return operand; + } + + @Specialization(guards = "!isNull") + public RList getDimNames(RAbstractVector vector) { + return vector.getDimNames(); + } + + @Specialization(guards = "isNull") + public RNull getDimNamesNull(@SuppressWarnings("unused") RAbstractVector vector) { + return RNull.instance; + } + + protected boolean isNull(RAbstractVector vector) { + return vector.getDimNames() == null; + } + +} diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java index abeb341174cb88b39ece6208c64fec0cedd8ad5a..e58d4689d0194d5fb1d96cd4d0a1cef55ba36bd0 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java @@ -33,7 +33,7 @@ import com.oracle.truffle.r.runtime.*; import com.oracle.truffle.r.runtime.data.*; import com.oracle.truffle.r.runtime.data.model.*; -@RBuiltin("dimnnames<-") +@RBuiltin("dimnames<-") @SuppressWarnings("unused") public abstract class UpdateDimNames extends RBuiltinNode { 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 7883a6d0927cfc26f013d7996f7cf0bf06b83a96..20a60666f09f59c22f185612dc0602b91e70154e 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 @@ -3328,6 +3328,14 @@ NULL #{ dim(1:3) } NULL +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ dimnames(1) } +NULL + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ dimnames(NULL) } +NULL + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions #{ m <- matrix(1:6, nrow=3) ; dim(m) } [1] 3 2 @@ -3457,6 +3465,24 @@ attr(,"foo") #{ x<-1:4; y<-c(2, 2); dim(x)<-y; y[1]=4; dim(x) } [1] 2 2 +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dim(x)<-1; attr(x, "dimnames")<-1 } +Error in attr(x, "dimnames") <- 1 : 'dimnames' must be a list + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) } +Error in dimnames(x) <- 1 : 'dimnames' must be a list + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dim(x)<-1; dimnames(x)<-list("a"); dimnames(x); dimnames(x)<-list(); dimnames(x) } +NULL + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dim(x)<-1; dimnames(x)<-list() } + +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dim(x)<-1; dimnames(x)<-list(0) } + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions #{ x<-1; dim(x)=1; attr(x, "foo")<-"foo"; dim(x)<-NULL; attributes(x) } $foo @@ -3471,6 +3497,10 @@ NULL #{ x<-1; dim(x)=1; names(x)<-"a"; dim(x)<-NULL; attributes(x) } NULL +##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions +#{ x<-1; dimnames(x) } +NULL + ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testDimensions #{ x<-42; y<-(dim(x)<-1); y } [1] 1 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java index 3bd952a47a9c9921048de9e3559a7a335e50a31c..a9ea3c4f649312c34c5c74ee6c1518ac1ae5b5e7 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java @@ -5868,6 +5868,36 @@ public class AllTests extends TestBase { assertEval("{ x<-list(1,2,3); names(x)<-c(21:23); attr(x, \"dim\")<-c(3); attr(x, \"foo\")<-\"foo\"; x }"); } + @Test + public void TestSimpleBuiltins_testDimensions_23b7e792972c66f8f798088f2e2db517() { + assertEval("{ x<-1; dimnames(x) }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_25559c72545218e5904f029d31043341() { + assertEval("{ dimnames(1) }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_94c1f6362cb75ccb566992ddbb86b57f() { + assertEval("{ dimnames(NULL) }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_fa944f6fbbd53435e7ee6de00c6e156d() { + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list() }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_2979e5a89355ac34e701f6b1d6910468() { + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(0) }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_2dc914e1fb3582f18a062c4d58f30902() { + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(\"a\"); dimnames(x); dimnames(x)<-list(); dimnames(x) }"); + } + @Test public void TestSimpleBuiltins_testDimensions_d23f468ff3aa03426d65d05b9ae6bd9b() { assertEvalError("{ x <- 1:2 ; dim(x) <- c(1,3) ; x }"); @@ -5903,6 +5933,16 @@ public class AllTests extends TestBase { assertEvalError("{ x<-1:4; attr(x, \"dimnames\")<-list(101, 102, 103, 104) }"); } + @Test + public void TestSimpleBuiltins_testDimensions_b89fca3316a99a6fae82c3f731c89989() { + assertEvalError("{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) }"); + } + + @Test + public void TestSimpleBuiltins_testDimensions_741ea80b0aaaf4ab255749f44075a2f7() { + assertEvalError("{ x<-1; dim(x)<-1; attr(x, \"dimnames\")<-1 }"); + } + @Test public void TestSimpleBuiltins_testDimensions_b5baee88565f3b36d5026bad6cc5e60a() { assertEvalWarning("{ x<-1:12; dim(x)<-c(12+10i); x }"); 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 478fc06236836cb9c3c3b7650a9ea420ecf9e18a..6871746a8706b234676a3400284e6b7d1f9cc94a 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 @@ -793,7 +793,7 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ x<-c(42); names(x)<-\"a\"; attr(x, \"dim\")<-1; names(x)<-\"z\"; names(x)<-NULL; attr(x, \"dimnames\")<-NULL; attributes(x) }"); assertEvalError("{ x<-1:4; attr(x, \"dimnames\")<-list(101, 102, 103, 104) }"); // assigning an "invisible" list returned by "attr(y, dimnames)<-" as dimnames attribute for -// x + // x assertEval("{ x<-c(1); y<-c(1); dim(x)<-1; dim(y)<-1; attr(x, \"dimnames\")<-(attr(y, \"dimnames\")<-list(\"b\")); attributes(x) }"); // there should be no output @@ -807,6 +807,15 @@ public class TestSimpleBuiltins extends TestBase { assertEval("{ x<-1:2; dim(x)=c(1,2); names(x)<-c(\"a\", \"b\"); attr(x, \"foo\")<-\"foo\"; dim(x)<-NULL; attributes(x) }"); assertEval("{ x<-1:4; names(x)<-c(21:24); attr(x, \"dim\")<-c(4); attr(x, \"foo\")<-\"foo\"; x }"); assertEval("{ x<-list(1,2,3); names(x)<-c(21:23); attr(x, \"dim\")<-c(3); attr(x, \"foo\")<-\"foo\"; x }"); + + assertEval("{ x<-1; dimnames(x) }"); + assertEval("{ dimnames(1) }"); + assertEval("{ dimnames(NULL) }"); + assertEvalError("{ x<-1; dim(x)<-1; dimnames(x)<-1; dimnames(x) }"); + assertEvalError("{ x<-1; dim(x)<-1; attr(x, \"dimnames\")<-1 }"); + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list() }"); + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(0) }"); + assertEval("{ x<-1; dim(x)<-1; dimnames(x)<-list(\"a\"); dimnames(x); dimnames(x)<-list(); dimnames(x) }"); } @Test