From 458f2936f3e7d01b7761dcb2cc7d7de1acd33799 Mon Sep 17 00:00:00 2001 From: Cedric Delamarre Date: Wed, 13 May 2020 16:47:54 +0200 Subject: [PATCH] * bug 16280 fixed: allow users to use mode() inside a macro. https://bugzilla.scilab.org/show_bug.cgi?id=16280 test_run overloading bug_16280 Change-Id: I5a18d237dea044bf6548115c8913f56c7c86e6fb --- .../ast/includes/system_env/configvariable.hxx | 6 +- .../ast/src/cpp/system_env/configvariable.cpp | 14 +++++ scilab/modules/core/sci_gateway/cpp/sci_mode.cpp | 4 +- scilab/modules/core/src/cpp/InitScilab.cpp | 2 +- scilab/modules/overloading/macros/%r_p.sci | 5 +- .../tests/nonreg_tests/bug_16280.dia.ref | 59 ++++++++++++++++++++ .../overloading/tests/nonreg_tests/bug_16280.tst | 27 +++++++++ 7 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 scilab/modules/overloading/tests/nonreg_tests/bug_16280.dia.ref create mode 100644 scilab/modules/overloading/tests/nonreg_tests/bug_16280.tst diff --git a/scilab/modules/ast/includes/system_env/configvariable.hxx b/scilab/modules/ast/includes/system_env/configvariable.hxx index 81be2ed..0380faf 100644 --- a/scilab/modules/ast/includes/system_env/configvariable.hxx +++ b/scilab/modules/ast/includes/system_env/configvariable.hxx @@ -248,6 +248,7 @@ public : */ private : + static int m_iUserMode; static int m_iPromptMode; static bool m_printInput; static bool m_printOutput; @@ -255,6 +256,9 @@ private : static bool m_printInteractive; public : + static void setUserMode(int _iPromptMode); + static int getUserMode(void); + static void setPromptMode(int _iPromptMode); static int getPromptMode(void); @@ -530,7 +534,7 @@ public : static void resetRecursionLevel(); static bool increaseRecursion(); static void decreaseRecursion(); -private: +private: static bool webMode; public: static bool getWebMode(); diff --git a/scilab/modules/ast/src/cpp/system_env/configvariable.cpp b/scilab/modules/ast/src/cpp/system_env/configvariable.cpp index 89c746a..7845243 100644 --- a/scilab/modules/ast/src/cpp/system_env/configvariable.cpp +++ b/scilab/modules/ast/src/cpp/system_env/configvariable.cpp @@ -473,6 +473,20 @@ bool ConfigVariable::isSilentError(void) return m_iSilentError; } +/* User Mode */ + +int ConfigVariable::m_iUserMode = 0; +void ConfigVariable::setUserMode(int _iPromptMode) +{ + m_iUserMode = _iPromptMode; + ConfigVariable::setPromptMode(_iPromptMode); +} + +int ConfigVariable::getUserMode(void) +{ + return m_iUserMode; +} + /* Prompt Mode */ int ConfigVariable::m_iPromptMode = 0; diff --git a/scilab/modules/core/sci_gateway/cpp/sci_mode.cpp b/scilab/modules/core/sci_gateway/cpp/sci_mode.cpp index 3369680..7085b1d 100644 --- a/scilab/modules/core/sci_gateway/cpp/sci_mode.cpp +++ b/scilab/modules/core/sci_gateway/cpp/sci_mode.cpp @@ -47,7 +47,7 @@ types::Function::ReturnValue sci_mode(types::typed_list &in, int _iRetCount, typ if (in.size() == 0) { - out.push_back(new types::Double(ConfigVariable::getPromptMode())); + out.push_back(new types::Double(ConfigVariable::getUserMode())); } else { @@ -72,7 +72,7 @@ types::Function::ReturnValue sci_mode(types::typed_list &in, int _iRetCount, typ return types::Function::Error; } - ConfigVariable::setPromptMode(iScilabMode); + ConfigVariable::setUserMode(iScilabMode); if (ConfigVariable::isPrintInteractive()) { diff --git a/scilab/modules/core/src/cpp/InitScilab.cpp b/scilab/modules/core/src/cpp/InitScilab.cpp index 5c7c6d8..a122bbb 100644 --- a/scilab/modules/core/src/cpp/InitScilab.cpp +++ b/scilab/modules/core/src/cpp/InitScilab.cpp @@ -434,7 +434,7 @@ int StartScilabEngine(ScilabEngineInfo* _pSEI) iScript = 1; } - ConfigVariable::setPromptMode(2); + ConfigVariable::setUserMode(2); InitializePreferences(iScript); return iMainRet; diff --git a/scilab/modules/overloading/macros/%r_p.sci b/scilab/modules/overloading/macros/%r_p.sci index 22073fb..8ad0cbb 100644 --- a/scilab/modules/overloading/macros/%r_p.sci +++ b/scilab/modules/overloading/macros/%r_p.sci @@ -64,7 +64,10 @@ function %r_p(h) end txtr=txtr+[part(tlk,1:width(k));emptystr(height(l)-size(tlk,1),1)] end - txt=[txt;emptystr(1);txtr] + txt=[txt;txtr]; + if mode() == 2 && l < m + txt=[txt;emptystr(1)]; + end end // add matrix delimiter and columns title and display nt = size(txt,1) diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_16280.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_16280.dia.ref new file mode 100644 index 0000000..295531b --- /dev/null +++ b/scilab/modules/overloading/tests/nonreg_tests/bug_16280.dia.ref @@ -0,0 +1,59 @@ +// ============================================================================= +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) 2020 - Stéphane MOTTELET +// +// This file is distributed under the same license as the Scilab package. +// ============================================================================= +// +// <-- CLI SHELL MODE --> +// +// <-- Non-regression test for bug 16280 --> +// +// <-- Bugzilla URL --> +// http://bugzilla.scilab.org/show_bug.cgi?id=15280 +// +// <-- Short Description --> +// mode()=-1 in overloads prevents choosing compact/not compact display mode +r = [1/%s %s/(1+%s)^2]; +r = [r ; 1+r]; +for i=-1:2 + mode(i) + mprintf("mode: %d\n", mode()) + mprintf("-------------------\n") + r + mprintf("-------------------\n") +end +mode: -1 +------------------- +------------------- +mode: 0 +------------------- + r = + 1 s + - --------- + s 1 +2s +s² + 1 +s 1 +3s +s² + ---- --------- + s 1 +2s +s² +------------------- +mode: 1 +------------------- + r = + 1 s + - --------- + s 1 +2s +s² + 1 +s 1 +3s +s² + ---- --------- + s 1 +2s +s² +------------------- +mode: 2 +------------------- + r = + 1 s + - --------- + s 1 +2s +s² + + 1 +s 1 +3s +s² + ---- --------- + s 1 +2s +s² +------------------- diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_16280.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_16280.tst new file mode 100644 index 0000000..937d428 --- /dev/null +++ b/scilab/modules/overloading/tests/nonreg_tests/bug_16280.tst @@ -0,0 +1,27 @@ +// ============================================================================= +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) 2020 - Stéphane MOTTELET +// +// This file is distributed under the same license as the Scilab package. +// ============================================================================= +// +// <-- CLI SHELL MODE --> +// +// <-- Non-regression test for bug 16280 --> +// +// <-- Bugzilla URL --> +// http://bugzilla.scilab.org/show_bug.cgi?id=15280 +// +// <-- Short Description --> +// mode()=-1 in overloads prevents choosing compact/not compact display mode + +r = [1/%s %s/(1+%s)^2]; +r = [r ; 1+r]; + +for i=-1:2 + mode(i) + mprintf("mode: %d\n", mode()) + mprintf("-------------------\n") + r + mprintf("-------------------\n") +end \ No newline at end of file -- 1.7.9.5