* bug 16280 fixed: allow users to use mode() inside a macro. 61/21461/3
Cedric Delamarre [Wed, 13 May 2020 14:47:54 +0000 (16:47 +0200)]
    https://bugzilla.scilab.org/show_bug.cgi?id=16280

    test_run overloading bug_16280

Change-Id: I5a18d237dea044bf6548115c8913f56c7c86e6fb

scilab/modules/ast/includes/system_env/configvariable.hxx
scilab/modules/ast/src/cpp/system_env/configvariable.cpp
scilab/modules/core/sci_gateway/cpp/sci_mode.cpp
scilab/modules/core/src/cpp/InitScilab.cpp
scilab/modules/overloading/macros/%r_p.sci
scilab/modules/overloading/tests/nonreg_tests/bug_16280.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_16280.tst [new file with mode: 0644]

index 81be2ed..0380faf 100644 (file)
@@ -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();
index 89c746a..7845243 100644 (file)
@@ -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;
index 3369680..7085b1d 100644 (file)
@@ -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())
         {
index 5c7c6d8..a122bbb 100644 (file)
@@ -434,7 +434,7 @@ int StartScilabEngine(ScilabEngineInfo* _pSEI)
         iScript = 1;
     }
 
-    ConfigVariable::setPromptMode(2);
+    ConfigVariable::setUserMode(2);
     InitializePreferences(iScript);
 
     return iMainRet;
index 22073fb..8ad0cbb 100644 (file)
@@ -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 (file)
index 0000000..295531b
--- /dev/null
@@ -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 (file)
index 0000000..937d428
--- /dev/null
@@ -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