* Bug 16111 fixed: now isglobal supports array of strings 28/21028/4
St├ęphane MOTTELET [Mon, 1 Jul 2019 15:08:58 +0000 (17:08 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=16111

Change-Id: I5fefe90e3e688a9dd8699f365c275cfbb603459e

modules/core/tests/nonreg_tests/bug_16111.tst [new file with mode: 0644]
scilab/CHANGES.md
scilab/modules/core/sci_gateway/cpp/sci_isglobal.cpp

diff --git a/modules/core/tests/nonreg_tests/bug_16111.tst b/modules/core/tests/nonreg_tests/bug_16111.tst
new file mode 100644 (file)
index 0000000..9a54897
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 16111 -->
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16111
+//
+// <-- Short Description -->
+// isglobal does not support non-scalar array of string as input
+
+global a;
+a=1;
+b=1;
+
+assert_checkequal(isglobal(["a","b"]), [%t, %f])
\ No newline at end of file
index 91c5625..0c823bb 100644 (file)
@@ -178,5 +178,6 @@ Bug Fixes
 * [#16075](http://bugzilla.scilab.org/show_bug.cgi?id=16075): `prettyprint()` was broken for cells.
 * [#16085](http://bugzilla.scilab.org/show_bug.cgi?id=16085): insertion in an empty struct was broken.
 * [#16087](http://bugzilla.scilab.org/show_bug.cgi?id=16087): Insertion of struct() in a non-empty struct crashed Scilab.
+* [#16111](http://bugzilla.scilab.org/show_bug.cgi?id=16111): `isglobal` was not supporting non-scalar array of strings as input.
 
 
index e41df61..3a55c61 100644 (file)
@@ -36,29 +36,28 @@ types::Function::ReturnValue sci_isglobal(types::typed_list &in, int _iRetCount,
         Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "isglobal", 1);
         return types::Function::Error;
     }
-    else
+
+    if (in[0]->isString() == false)
     {
-        if (in[0]->isString() == false)
-        {
-            Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "isglobal", 1);
-            return types::Function::Error;
-        }
+        Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "isglobal", 1);
+        return types::Function::Error;
+    }
 
-        types::String* pS = in[0]->getAs<types::String>();
-        if (pS->isScalar() == false)
-        {
-            Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "isglobal", 1);
-            return types::Function::Error;
-        }
+    types::String* pS = in[0]->getAs<types::String>();
+    types::Bool *pOut = new types::Bool(pS->getDims(), pS->getDimsArray());
 
-        if (symbol::Context::getInstance()->isGlobalVisible(symbol::Symbol(pS->get(0))))
+    for (int i = 0; i < pS->getSize(); i++)
+    {
+        if (symbol::Context::getInstance()->isGlobalVisible(symbol::Symbol(pS->get(i))))
         {
-            out.push_back(new types::Bool(1));
+            pOut->set(i,1);
         }
         else
         {
-            out.push_back(new types::Bool(0));
+            pOut->set(i,0);
         }
     }
+
+    out.push_back(pOut);
     return types::Function::OK;
 }