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 1be6fc9e6c8e5123c859945c0eaf5ca457b8a672..48f97b147f36682ec368ac5e61fe3914693c4765 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 24df5900802aca82ff0b49958e35e4714a9bcb90..406e40f87fa2b5cae0874b02a1faa6b9f68a4101 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 5881b9f0dd95043991b81132e365d08853df5f4f..52ea31129b649f991c2dd31cf622274b8466e206 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)"); + } }