* Bug #14499 fixed - getd() did not update already defined functions 91/17891/4
Nicolas [Thu, 10 Mar 2016 14:02:34 +0000 (15:02 +0100)]
Change-Id: I83cee2544d21fc4f91d15affe624ae599a1d6453

scilab/CHANGES
scilab/modules/functions/macros/getd.sci
scilab/modules/functions/tests/nonreg_tests/bug_14499.dia.ref [new file with mode: 0644]
scilab/modules/functions/tests/nonreg_tests/bug_14499.tst [new file with mode: 0644]

index e768c5c..f781cbc 100644 (file)
@@ -406,6 +406,8 @@ In 6.0.0:
 
 * Bug #14476 fixed - Dotmultiplication between polynomials and imaginary numbers was always returning 0
 
+* Bug #14499 fixed - getd() did not update already defined functions
+
 
 In 6.0.0 beta-1:
 
index 85cb40d..a60a10c 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
 // Copyright (C) ENPC
-//
+// Copyright (C) 2016 - Samuel GOUGEON
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
@@ -46,9 +46,9 @@ function getd(path,option)
         return ;
     end
 
-    old = who("get");
-    //prot = funcprot();funcprot(0)
-
+    old = who("local");
+    old = old(isdef(old, "l"))
+    //prot = funcprot(); funcprot(0)
     for k=1:size(lst,"*");
         if fileparts(lst(k),"extension")==".sci" then
             if execstr("exec(lst(k));","errcatch")<>0 then
@@ -56,17 +56,11 @@ function getd(path,option)
             end
         end
     end
-
     //funcprot(prot);
-    new = who("get");
-    for i=1:size(old, "*")
-        b = find(new == old(i));
-        if isempty(b) == %f then
-            new(b) = [];
-        end
-    end
+    new = who("local");
+    new = new(isdef(new, "l"))
+    new = setdiff(new, old)
 
-    //new = new(1:(size(new,"*")-nold-2));  // -4 becomes -2: fix the fix for bug 2807
     if new<>[] then
         execstr("["+strcat(new,",")+"]=resume("+strcat(new,",")+")")
     end
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_14499.dia.ref b/scilab/modules/functions/tests/nonreg_tests/bug_14499.dia.ref
new file mode 100644 (file)
index 0000000..3f0228d
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14499 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14499
+//
+// <-- Short Description -->
+// getd() did not update functions already defined
+fp = funcprot(0);
+d = TMPDIR+"\getd_tmp";
+mkdir(d);
+f = [
+"function r = test_getd()"
+" r = 1;"
+"endfunction"
+];
+mputl(f, d+"\test_getd.sci");
+getd(d);
+r = test_getd();
+f(2) = " r = 2;";
+mputl(f, d+"\test_getd.sci");
+getd(d);
+r = test_getd();
+assert_checkequal(r,2);
+rmdir(d,"s");
+funcprot(fp);
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_14499.tst b/scilab/modules/functions/tests/nonreg_tests/bug_14499.tst
new file mode 100644 (file)
index 0000000..3f0228d
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14499 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14499
+//
+// <-- Short Description -->
+// getd() did not update functions already defined
+fp = funcprot(0);
+d = TMPDIR+"\getd_tmp";
+mkdir(d);
+f = [
+"function r = test_getd()"
+" r = 1;"
+"endfunction"
+];
+mputl(f, d+"\test_getd.sci");
+getd(d);
+r = test_getd();
+f(2) = " r = 2;";
+mputl(f, d+"\test_getd.sci");
+getd(d);
+r = test_getd();
+assert_checkequal(r,2);
+rmdir(d,"s");
+funcprot(fp);