From 13bf460c411798e1027cc0c6cec3f0276f2e1d47 Mon Sep 17 00:00:00 2001
From: Christian Humer <christian.humer@oracle.com>
Date: Mon, 15 Feb 2016 13:27:19 -0800
Subject: [PATCH] fix for env[[index]] <- NULL

---
 .../r/nodes/access/vector/CachedReplaceVectorNode.java    | 3 +++
 .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 8 ++++++++
 .../truffle/r/test/library/base/TestSimpleVectors.java    | 2 ++
 3 files changed, 13 insertions(+)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java
index ac985c1a11..76de77faaa 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java
@@ -341,6 +341,9 @@ final class CachedReplaceVectorNode extends CachedVectorNode {
             case PairList:
                 vector = RType.List;
                 break;
+            case Environment:
+                vector = RType.List;
+                break;
             default:
                 vector = this.vectorType;
                 break;
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 b34ed25ea9..3a09e444bf 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
@@ -100260,6 +100260,14 @@ NULL
 [1] FALSE
 
 
+##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testScalarUpdate
+#{ e < new.env(); e[["abc"]] <- 3}
+Error: object 'e' not found
+
+##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testScalarUpdate
+#{ e < new.env(); e[["abc"]] <- NULL}
+Error: object 'e' not found
+
 ##com.oracle.truffle.r.test.library.base.TestSimpleVectors.testScalarUpdate
 #{ f <- function() { a[3] <- 4 } ; f() }
 Error in a[3] <- 4 : object 'a' not found
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
index 7be447ea80..3582fb18d4 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleVectors.java
@@ -1383,6 +1383,8 @@ public class TestSimpleVectors extends TestBase {
         assertEval("{ b <- c(\"a\",\"b\") ; z <- b ; b[[3L]] <- \"xx\" ; b }");
 
         assertEval("{ x <- as.list(1:2) ; x[[\"z\"]] <- NULL ; x }");
+        assertEval("{ e < new.env(); e[[\"abc\"]] <- 3}");
+        assertEval("{ e < new.env(); e[[\"abc\"]] <- NULL}");
 
         assertEval("{ x<-5:1; x[0-2]<-1000; x }");
         assertEval("{ x<-c(); x[[TRUE]] <- 2; x }");
-- 
GitLab