From f6705816c44a684e8a35c667b6fb584f4ec2f559 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Fri, 1 Dec 2017 12:51:55 +0100
Subject: [PATCH] Fix: options with list set wrong visibility

---
 .../oracle/truffle/r/nodes/builtin/base/OptionsFunctions.java | 4 +++-
 .../oracle/truffle/r/test/builtins/TestBuiltin_options.java   | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/OptionsFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/OptionsFunctions.java
index 43d5493d06..ca2fbc86ad 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/OptionsFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/OptionsFunctions.java
@@ -119,7 +119,7 @@ public class OptionsFunctions {
             for (int i = 0; i < values.length; i++) {
                 String argName = signature.getName(i);
                 Object value = values[i];
-                if (argNameNull.profile(argName == null)) {
+                if (argNameNull.profile(argName == null || value instanceof RList)) {
                     // getting
                     String optionName = null;
                     if (value instanceof RStringVector) {
@@ -146,6 +146,8 @@ public class OptionsFunctions {
                             listNames[j] = name;
                             options.setValue(name, list.getDataAtAsObject(j));
                         }
+                        // any settings means result is invisible
+                        visible = false;
                         // if this is the only argument, no need to copy, can just return
                         if (values.length == 1) {
                             data = listData;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
index 97b6fd5ca1..63411ea2a1 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_options.java
@@ -54,6 +54,7 @@ public class TestBuiltin_options extends TestBase {
         assertEval("{ getOption(NULL) }");
         assertEval("{ getOption(character()) }");
         assertEval("{ options(\"timeout\", \"width\") }");
+        assertEval("{ options(options(digits = 5)) }");
     }
 
     @Test
-- 
GitLab