[bug_14432] function call with inplicitlist opt argument fixed 67/17967/3
Cedric Delamarre [Wed, 23 Mar 2016 15:22:36 +0000 (16:22 +0100)]
test_run ast bug_14432

Change-Id: I649d1e65fa130244f3714efa5bbf9ca560f5e6ef

scilab/CHANGES
scilab/modules/ast/src/cpp/ast/run_CallExp.hpp
scilab/modules/ast/tests/nonreg_tests/bug_14432.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14432.tst [new file with mode: 0644]

index 6e6e8cf..d95a75c 100644 (file)
@@ -379,6 +379,8 @@ In 6.0.0:
 
 * Bug #14429 fixed - rationals r+(-r) and r-r did not simplify the denominator to 1 in simp_mode(%t)
 
+* Bug #14432 fixed - using an implicit list as scoped assignation to a variable in function call caused scilab to crash
+
 * Bug #14433 fixed - acoth (which call atanh) crash scilab
 
 * Bug #14434 fixed - PlotSparse did not work anymore.
index 0f7eb98..4e52e06 100644 (file)
@@ -176,6 +176,23 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
             continue;
         }
 
+        //extract implicit list for call()
+        if (pIT->isCallable() || pIT->isUserType())
+        {
+            if (inTmp[iterIn]->isImplicitList())
+            {
+                types::ImplicitList* pIL = inTmp[iterIn]->getAs<types::ImplicitList>();
+                if (pIL->isComputable())
+                {
+                    types::InternalType* pITExtract = pIL->extractFullMatrix();
+                    pITExtract->IncreaseRef();
+                    inTmp[iterIn] = pITExtract;
+                    pIL->DecreaseRef();
+                    pIL->killMe();
+                }
+            }
+        }
+
         // management of optional input
         if (arg->isAssignExp())
         {
@@ -198,25 +215,6 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
             continue;
         }
 
-        //extract implicit list for call()
-        if (pIT->isCallable() || pIT->isUserType())
-        {
-            if (inTmp[iterIn]->isImplicitList())
-            {
-                types::ImplicitList* pIL = inTmp[iterIn]->getAs<types::ImplicitList>();
-                if (pIL->isComputable())
-                {
-                    types::InternalType* pITExtract = pIL->extractFullMatrix();
-                    pITExtract->IncreaseRef();
-                    in.push_back(pITExtract);
-                    pIL->DecreaseRef();
-                    pIL->killMe();
-                    iterIn++;
-                    continue;
-                }
-            }
-        }
-
         // default case
         for (int i = 0; i < vectNbResult[iLoop]; i++, iterIn++)
         {
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14432.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14432.dia.ref
new file mode 100644 (file)
index 0000000..567b70f
--- /dev/null
@@ -0,0 +1,20 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14432 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14432
+//
+// <-- Short Description -->
+// Mysterious anomaly makes Scilab crash
+function [res] = F(x)
+  res = struct();
+  res.y = x;
+endfunction
+err=execstr("F(x = (1:4));", "errcatch");
+assert_checkequal(err, 0);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14432.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14432.tst
new file mode 100644 (file)
index 0000000..90e15ea
--- /dev/null
@@ -0,0 +1,24 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 14432 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14432
+//
+// <-- Short Description -->
+// Mysterious anomaly makes Scilab crash
+
+function [res] = F(x)
+    res = struct();
+    res.y = x;
+endfunction
+
+err=execstr("F(x = (1:4));", "errcatch");
+assert_checkequal(err, 0);