From 104adb5f969e51b2252b79d7b59203501971cff8 Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Tue, 3 Feb 2015 09:37:28 -0800
Subject: [PATCH] The "names" attribute id no longer copied on access.

---
 .../r/nodes/access/array/write/UpdateArrayHelperNode.java    | 3 +++
 .../src/com/oracle/truffle/r/runtime/data/RVector.java       | 5 ++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
index 1aafaa2891..3e4fe4a735 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
@@ -428,6 +428,9 @@ public abstract class UpdateArrayHelperNode extends RNode {
         if (positions.getNames() != null) {
             posNames.enter();
             RStringVector names = getNamesVector(resultVector);
+            if (names.isShared()) {
+                names = (RStringVector) names.copy();
+            }
             RStringVector newNames = positions.getNames();
             namesNACheck.enable(newNames);
             for (int i = 0; i < positions.getLength(); i++) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
index 8ff3648209..b5afd53f0a 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
@@ -118,13 +118,12 @@ public abstract class RVector extends RBounded implements RShareable, RAbstractV
     public final RStringVector getNames() {
         if (names == null) {
             if (dimNames != null && dimNames.getLength() == 1) {
-                RStringVector res = (RStringVector) dimNames.getDataAt(0);
-                return res.isShared() ? (RStringVector) res.copy() : res;
+                return (RStringVector) dimNames.getDataAt(0);
             } else {
                 return null;
             }
         } else {
-            return names.isShared() ? (RStringVector) names.copy() : names;
+            return names;
         }
     }
 
-- 
GitLab