[bug_14379] bad expected size in recursive extraction. 48/18648/1
Cedric Delamarre [Thu, 3 Nov 2016 14:50:41 +0000 (15:50 +0100)]
test_run ast bug_14379

Change-Id: I1b0cc3fef28290728e0ffd081dd9fc7675858abb

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

index a50b17a..fdf8b43 100644 (file)
@@ -343,6 +343,7 @@ Bug Fixes
 * [#13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990): `warning` with localization enabled some memory corruption
 * [#14192](http://bugzilla.scilab.org/show_bug.cgi?id=14192): `g_margin` error-ed for double integrator.
 * [#14367](http://bugzilla.scilab.org/show_bug.cgi?id=14367): `edit_curv` failed opening due to a `[]+1` operation.
+* [#14379](http://bugzilla.scilab.org/show_bug.cgi?id=14379): Problem with lists of functions having 2 arguments.
 * [#14395](http://bugzilla.scilab.org/show_bug.cgi?id=14395): `dir` displayed a []+".." warning when no subdirectory exists.
 * [#14448](http://bugzilla.scilab.org/show_bug.cgi?id=14448): removed havewindow() was still documented
 * [#14461](http://bugzilla.scilab.org/show_bug.cgi?id=14461): Calling `grand(n, "markov", P, x0)` did not return all outputs.
index ede6020..89333db 100644 (file)
@@ -121,6 +121,9 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
         throw ie;
     }
 
+    // reset expected size for recursive call
+    // ie [a, b] = l(1)(1), where l is a list containing a function with two output argument
+    setExpectedSize(-1);
     // get function/variable
     try
     {
@@ -131,6 +134,8 @@ void RunVisitorT<T>::visitprivate(const CallExp &e)
         CoverageInstance::stopChrono((void*)&e);
         throw;
     }
+    setExpectedSize(iSaveExpectedSize);
+
     types::InternalType* pIT = getResult();
 
     // pIT can be NULL if one of call return nothing. foo()(1) with foo return nothing.
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14379.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14379.dia.ref
new file mode 100644 (file)
index 0000000..c480b45
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// 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 14379 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14379
+//
+// <-- Short Description -->
+// Problem with lists of functions having 2 arguments
+function [y1, y2] = F1(x)
+ y1 = x + 1;
+ y2 = x + 2;
+endfunction
+L = list(F1);
+[y1, y2] = L(1)(1);
+assert_checkequal(y1, 2);
+assert_checkequal(y2, 3);
+res = L(1)(1:10)(5);
+assert_checkequal(res, 6);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14379.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14379.tst
new file mode 100644 (file)
index 0000000..b0fdbf4
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// 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 14379 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14379
+//
+// <-- Short Description -->
+// Problem with lists of functions having 2 arguments
+
+function [y1, y2] = F1(x)
+    y1 = x + 1;
+    y2 = x + 2;
+endfunction
+
+L = list(F1);
+[y1, y2] = L(1)(1);
+
+assert_checkequal(y1, 2);
+assert_checkequal(y2, 3);
+
+
+res = L(1)(1:10)(5);
+assert_checkequal(res, 6);