From 12d67574204de197448a36ccf6186a30b43baa00 Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Thu, 24 Aug 2017 14:05:09 +0200 Subject: [PATCH] Minor fixes and cleanup. --- .../truffle/r/nodes/builtin/base/Transpose.java | 14 +++++++------- .../r/nodes/builtin/casts/PipelineStep.java | 4 +++- .../data/closures/RToDoubleVectorClosure.java | 2 +- .../truffle/r/test/builtins/TestBuiltin_t.java | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) 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 decde06b3f..6bfbaee476 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 @@ -235,22 +235,22 @@ public abstract class Transpose extends RBuiltinNode.Arg1 { }); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractIntVector x) { return transposeInternal(x, l -> new int[l], (a, v, i, j) -> a[i] = v.getDataAt(j), RDataFactory::createIntVector); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractLogicalVector x) { return transposeInternal(x, l -> new byte[l], (a, v, i, j) -> a[i] = v.getDataAt(j), RDataFactory::createLogicalVector); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractDoubleVector x) { return transposeInternal(x, l -> new double[l], (a, v, i, j) -> a[i] = v.getDataAt(j), RDataFactory::createDoubleVector); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractComplexVector x) { return transposeInternal(x, l -> new double[l * 2], (a, v, i, j) -> { RComplex d = v.getDataAt(j); @@ -259,17 +259,17 @@ public abstract class Transpose extends RBuiltinNode.Arg1 { }, RDataFactory::createComplexVector); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractStringVector x) { return transposeInternal(x, l -> new String[l], (a, v, i, j) -> a[i] = v.getDataAt(j), RDataFactory::createStringVector); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractListVector x) { return transposeInternal(x, l -> new Object[l], (a, v, i, j) -> a[i] = v.getDataAt(j), (a, c) -> RDataFactory.createList(a)); } - @Specialization(guards = "x.isMatrix()") + @Specialization(guards = {"x.isMatrix()", "!isSquare(x)"}) protected RVector<?> transpose(RAbstractRawVector x) { return transposeInternal(x, l -> new byte[l], (a, v, i, j) -> a[i] = v.getRawDataAt(j), (a, c) -> RDataFactory.createRawVector(a)); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java index c172a54400..474168dc90 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/PipelineStep.java @@ -177,7 +177,9 @@ public abstract class PipelineStep<T, R> { public final boolean vectorCoercion; /** - * Whether the cast should reuse a non-shared vector. + * Allows the cast node to create and use wrappers for non-shared vectors. Only use if you + * know the vector to be casted won't escape and preferably if the vector is just used + * read-only. */ public final boolean reuseNonShared; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java index 8a341a3866..79a57bf9fb 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/closures/RToDoubleVectorClosure.java @@ -66,7 +66,7 @@ abstract class RToDoubleVectorClosure extends RToVectorClosure implements RAbstr @Override public final RAbstractDoubleVector copyWithNewDimensions(int[] newDimensions) { - if (!keepAttributes) { + if (keepAttributes) { return materialize().copyWithNewDimensions(newDimensions); } return this; diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_t.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_t.java index 2ab45b0034..ca5b37d806 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_t.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_t.java @@ -61,7 +61,7 @@ public class TestBuiltin_t extends TestBase { } @Test - public void testTransposeNotSquare() { + public void testTransposeNonSquare() { // test square matrices assertEval("{ m <- matrix(1:8, 2, 4) ; t(m) }"); assertEval("{ m <- matrix(seq(0.1,0.8,0.1), 2, 4) ; t(m) }"); -- GitLab