From 0cbd80005a1ac853f40b07bcab9958eb1dc454d0 Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Mon, 6 Feb 2017 13:37:29 +0100 Subject: [PATCH] Sessions could not be save for empty workspaces since LoadSaveFunctions.SaveToConn expected a non-empty list of variables to store. However, GnuR allows to do so. Also fixed problem when using function "q()" in test cases which caused the test suite to crash due to an unexpected but legitimate exception. --- .../truffle/r/nodes/builtin/base/LoadSaveFunctions.java | 2 +- .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 3 +++ .../oracle/truffle/r/test/builtins/TestBuiltin_quit.java | 7 ++++++- .../com/oracle/truffle/r/test/generate/FastRSession.java | 3 +++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LoadSaveFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LoadSaveFunctions.java index c607fbbbf5..3f9917adf7 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LoadSaveFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LoadSaveFunctions.java @@ -196,7 +196,7 @@ public class LoadSaveFunctions { @Override protected void createCasts(CastBuilder casts) { - casts.arg("list").mustBe(stringValue()).asStringVector().mustBe(notEmpty(), RError.Message.FIRST_ARGUMENT_NOT_CHARVEC).findFirst(); + casts.arg("list").mustBe(stringValue()).asStringVector(); ConnectionFunctions.Casts.connection(casts); casts.arg("ascii").mustBe(logicalValue(), RError.Message.ASCII_NOT_LOGICAL); casts.arg("version").allowNull().mustBe(integerValue()); 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 7b9a8c46ef..ae5334fe08 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 @@ -41706,6 +41706,9 @@ $ix [1] -Inf -Inf -Inf -Inf -Inf -Inf 0 1 2 3 4 5 Inf Inf Inf [16] Inf Inf +##com.oracle.truffle.r.test.builtins.TestBuiltin_quit.testQuitEmptyEnv# +#{ quit("yes") } + ##com.oracle.truffle.r.test.builtins.TestBuiltin_quit.testQuitErrorSave# #{ quit("xx") } Error in quit(save, status, runLast) : unrecognized value of 'save' diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quit.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quit.java index face212e72..7c3462c7f8 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quit.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_quit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,4 +32,9 @@ public class TestBuiltin_quit extends TestBase { public void testQuitErrorSave() { assertEval("{ quit(\"xx\") }"); } + + @Test + public void testQuitEmptyEnv() { + assertEval("{ quit(\"yes\") }"); + } } diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java index 9cc6074db2..68702d56a7 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/FastRSession.java @@ -35,6 +35,7 @@ import com.oracle.truffle.api.debug.SuspendedCallback; import com.oracle.truffle.api.debug.SuspendedEvent; import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.vm.PolyglotEngine; +import com.oracle.truffle.r.runtime.ExitException; import com.oracle.truffle.r.runtime.RCmdOptions; import com.oracle.truffle.r.runtime.RCmdOptions.Client; import com.oracle.truffle.r.runtime.RError; @@ -234,6 +235,8 @@ public final class FastRSession implements RSession { } } catch (ParseException e) { e.report(consoleHandler); + } catch (ExitException e) { + // exit exceptions are legitimate if a test case calls "q()" } catch (RError e) { // nothing to do } catch (Throwable t) { -- GitLab