* Bug 15728 fixed: evstr(s) was wrong for s='k' 'tmp' 'vals'.. 76/20476/6
Samuel GOUGEON [Sun, 26 Aug 2018 07:08:48 +0000 (09:08 +0200)]
  http://bugzilla.scilab.org/15728

Change-Id: I9169f1eaa588ab7a53d9949f0a9fc86368297eca

scilab/CHANGES.md
scilab/modules/string/macros/evstr.sci
scilab/modules/string/tests/nonreg_tests/bug_15728.tst [new file with mode: 0644]

index deca8e6..66e410d 100644 (file)
@@ -616,6 +616,7 @@ Known issues
 * [#15718](http://bugzilla.scilab.org/show_bug.cgi?id=15718): `bitand`, `bitxor` and `bitor` might miswork with some `uint64` inputs.
 * [#15721](http://bugzilla.scilab.org/show_bug.cgi?id=15721): An error while using `save(File, "-append", ..)` deleted the existing file.
 * [#15724](http://bugzilla.scilab.org/show_bug.cgi?id=15724): `[]^3` displayed error messages about xerbla lapack library (regression)
+* [#15728](http://bugzilla.scilab.org/show_bug.cgi?id=15728): `evstr(s)` returns bad results (and errors) for s being "k" "tmp" "lhs" "rhs" "comm" "vars" "vals"..
 * [#15733](http://bugzilla.scilab.org/show_bug.cgi?id=15733): Some fixes after `deg(0*%s)` => `-%inf`.
 * [#15735](http://bugzilla.scilab.org/show_bug.cgi?id=15735): `interp1` yielded some []+n warnings.
 * [#15736](http://bugzilla.scilab.org/show_bug.cgi?id=15736): `unique` failed with complex numbers.
index f37c5b7..c9a505f 100644 (file)
@@ -15,7 +15,7 @@
 
 function [%val, %ierr] = evstr(%str)
 
-    [lhs, rhs] = argn(0);
+    %lhs = argn(1);
     %val = [];
     %ierr =  0;
 
@@ -58,8 +58,10 @@ function [%val, %ierr] = evstr(%str)
         %t1(1) = "%val=[" + %t1(1);
         %t1($) = part(%t1($), 1:length(%t1($)) - 1)+";";
         %t1($+1) = "]";
+        clear k tmp vars vals regExp comm %str
+
         %ierr = execstr(%t1, "errcatch");
-        if lhs == 1 & %ierr~=0 then
+        if %lhs == 1 & %ierr~=0 then
             msg = _("%s: Argument #%d: Some expression can''t be evaluated (%s).\n")
             error(msprintf(msg, "evstr", 1, strcat(lasterror())))
         end
@@ -75,13 +77,12 @@ function [%val, %ierr] = evstr(%str)
             error(msprintf(msg, "evstr", 1));
         end
         %sexp = %str(2),
-        %nstr = prod(size(%sexp));
         % = list();
-        for %k_ = 1:%nstr,
+        for %k_ = 1:prod(size(%sexp))
             [%w, %ierr] = evstr(%sexp(%k_));
             %(%k_) = %w;
             if %ierr <>0  then
-                if lhs==2
+                if %lhs == 2
                     %val = [];
                     return;
                 else
@@ -90,7 +91,7 @@ function [%val, %ierr] = evstr(%str)
                 end
             end
         end
-        if lhs==2
+        if %lhs == 2
             [%val, %ierr] = evstr(%str(1));
         else
             %val = evstr(%str(1));
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_15728.tst b/scilab/modules/string/tests/nonreg_tests/bug_15728.tst
new file mode 100644 (file)
index 0000000..4e1fd8a
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+// <-- Non-regression test for bug 15728 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15728
+//
+// <-- Short Description -->
+// evstr("k") evstr("tmp") evstr("comm") evstr("lhs") evstr("rhs") ...
+// were wrong (overwritten by internal values).
+
+k = rand(1,3);
+tmp = k; lhs = k; rhs = k; comm = k; vals = k; vars = k;
+for s = ["k" "tmp" "lhs" "rhs" "comm" "vals" "vars"]
+    assert_checkequal(evstr(s), k);
+end
+assert_checkequal(evstr("k;tmp;lhs;rhs;comm;vals;vars"), ones(7,1)*k);