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 43d5493d06ba6c9e958597448d8b78aad39c9420..ca2fbc86ad27888b63c1593b0b41a720a1b2635e 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 97b6fd5ca14a135fd97d82c11f6cbb9879929d9e..63411ea2a1c1617b0943cf10747ca73e969f2af1 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