From ef3fd0dce704202a4cf3e4318c821e035ceb3307 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Mon, 10 Jul 2017 14:53:19 +0200 Subject: [PATCH] Fix: MatrixFastPath handles REmpty like RMissing --- .../r/nodes/builtin/base/fastpaths/MatrixFastPath.java | 5 +++-- .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 7 +++++++ .../oracle/truffle/r/test/builtins/TestBuiltin_matrix.java | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/MatrixFastPath.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/MatrixFastPath.java index 1be6fc9e6c..48f97b147f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/MatrixFastPath.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/MatrixFastPath.java @@ -32,6 +32,7 @@ import com.oracle.truffle.r.nodes.builtin.base.MatrixNodeGen; import com.oracle.truffle.r.nodes.unary.CastIntegerNode; import com.oracle.truffle.r.nodes.unary.FirstIntNode; import com.oracle.truffle.r.runtime.RError; +import com.oracle.truffle.r.runtime.data.REmpty; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; @@ -58,8 +59,8 @@ public abstract class MatrixFastPath extends RFastPathNode { @Cached("createBinaryProfile()") ConditionProfile dimMissingProfile, @Cached("createMatrix()") Matrix matrix, @Cached("createClassProfile()") ValueProfile classProfile) { - boolean rowMissing = rowMissingProfile.profile(nrow == RMissing.instance); - boolean colMissing = colMissingProfile.profile(ncol == RMissing.instance); + boolean rowMissing = rowMissingProfile.profile(nrow == RMissing.instance || nrow == REmpty.instance); + boolean colMissing = colMissingProfile.profile(ncol == RMissing.instance || ncol == REmpty.instance); int row = rowMissing ? 1 : firstRow.executeInt(castRow.doCast(nrow)); int col = colMissing ? 1 : firstCol.executeInt(castCol.doCast(ncol)); Object dim = dimMissingProfile.profile(dimnames == RMissing.instance) ? RNull.instance : dimnames; 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 24df590080..406e40f87f 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 @@ -34977,6 +34977,13 @@ c 33 2 2 3 3 +##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testMatrixFastPath# +#matrix(1:9,,3) + [,1] [,2] [,3] +[1,] 1 4 7 +[2,] 2 5 8 +[3,] 3 6 9 + ##com.oracle.truffle.r.test.builtins.TestBuiltin_matrix.testmatrix1# #argv <- list(NA_real_, 1L, 5L, FALSE, list('Residuals', c('Df', 'Sum Sq', 'Mean Sq', 'F value', 'Pr(>F)')), FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]])) Df Sum Sq Mean Sq F value Pr(>F) diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java index 5881b9f0dd..52ea31129b 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_matrix.java @@ -251,4 +251,9 @@ public class TestBuiltin_matrix extends TestBase { public void testmatrix44() { assertEval("argv <- list(structure(list(a1 = 1:3, a2 = 4:6, a3 = 3.14159265358979, a4 = c('a', 'b', 'c')), .Names = c('a1', 'a2', 'a3', 'a4')), 2, 2, FALSE, NULL, FALSE, FALSE); .Internal(matrix(argv[[1]], argv[[2]], argv[[3]], argv[[4]], argv[[5]], argv[[6]], argv[[7]]))"); } + + @Test + public void testMatrixFastPath() { + assertEval("matrix(1:9,,3)"); + } } -- GitLab