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