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