bug 6792 fix
Serge Steer [Mon, 22 Mar 2010 10:31:58 +0000 (11:31 +0100)]
scilab/CHANGES_5.2.X
scilab/modules/data_structures/src/fortran/followpath.f
scilab/modules/data_structures/tests/nonreg_tests/bug_6792.dia.ref [new file with mode: 0644]
scilab/modules/data_structures/tests/nonreg_tests/bug_6792.tst [new file with mode: 0644]

index 1a5eda5..7b3c6b2 100644 (file)
@@ -115,6 +115,8 @@ Bug Fixes:
 
 * bug 6712 fixed - The "title" function forced displaying axes.
 
+* bug 6792 fixed - wrong interpretation of macro arguments when the macro call  appears in an list extraction
+
 
 
 
index 2a2c688..8dea9fb 100644 (file)
@@ -101,11 +101,17 @@ c     extract infos out of the current sublist
       llisti=sadr(illisti+mi+3)
       voll=istk(illisti+mi+2)-1+sadr(3+mi)
 c     go ahead along the path
+
+      if(typi.eq.13.or.typi.eq.11) then
+c     .  not an extraction but a function call
+         info=2
+         goto 50
+      endif
+
 c
       if(istk(ilindi).eq.10) then
 c     .  current element index is a name
-
-         if(istk(ilindi+1)*istk(ilindi+2).ne.1) then
+         if (istk(ilindi+1)*istk(ilindi+2).ne.1) then
             info=3
             goto 50
 c            call error(21)
diff --git a/scilab/modules/data_structures/tests/nonreg_tests/bug_6792.dia.ref b/scilab/modules/data_structures/tests/nonreg_tests/bug_6792.dia.ref
new file mode 100644 (file)
index 0000000..763e20f
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - INRIA -Serge.Steer@inria.fr
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 6792 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6792
+//
+// <-- Short Description -->
+// mis-interpretation of macro arguments when the macro call  appears in an list extraction
+function [x,y]=fun(varargin), x=varargin,y=size(varargin),endfunction
+function y=%foo_e(name,ml),y=fun,endfunction
+M=mlist(['foo']);
+M1=mlist(['foo','meth'],fun);
+[x,y]=M.meth(['hello' 'world']);
+if or(x<>list(['hello' 'world']))|y<>1 then bugmes();quit;end
+[x,y]=M1.meth(['hello' 'world']);
+if or(x<>list(['hello' 'world']))|y<>1 then bugmes();quit;end
+[x,y]=M.meth('xx',list(1,2,3));
+if or(x<>list('xx',list(1,2,3)))|y<>2 then bugmes();quit;end
+[x,y]=M1.meth('xx',list(1,2,3));
+if or(x<>list('xx',list(1,2,3)))|y<>2 then bugmes();quit;end
+[x,y]=M.meth('xx',1,2,3);
+if or(x<>list('xx',1,2,3))|y<>4 then bugmes();quit;end
+[x,y]=M1.meth('xx',1,2,3);
+if or(x<>list('xx',1,2,3))|y<>4 then bugmes();quit;end
diff --git a/scilab/modules/data_structures/tests/nonreg_tests/bug_6792.tst b/scilab/modules/data_structures/tests/nonreg_tests/bug_6792.tst
new file mode 100644 (file)
index 0000000..5f01e5d
--- /dev/null
@@ -0,0 +1,37 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - INRIA -Serge.Steer@inria.fr
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 6792 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6792
+//
+// <-- Short Description -->
+// mis-interpretation of macro arguments when the macro call  appears in an list extraction
+function [x,y]=fun(varargin), x=varargin,y=size(varargin),endfunction
+function y=%foo_e(name,ml),y=fun,endfunction
+
+M=mlist(['foo']);
+M1=mlist(['foo','meth'],fun);
+
+[x,y]=M.meth(['hello' 'world']);
+if or(x<>list(['hello' 'world']))|y<>1 then pause,end
+[x,y]=M1.meth(['hello' 'world']);
+if or(x<>list(['hello' 'world']))|y<>1 then pause,end
+
+[x,y]=M.meth('xx',list(1,2,3));
+if or(x<>list('xx',list(1,2,3)))|y<>2 then pause,end
+
+[x,y]=M1.meth('xx',list(1,2,3));
+if or(x<>list('xx',list(1,2,3)))|y<>2 then pause,end
+
+[x,y]=M.meth('xx',1,2,3);
+if or(x<>list('xx',1,2,3))|y<>4 then pause,end
+
+[x,y]=M1.meth('xx',1,2,3);
+if or(x<>list('xx',1,2,3))|y<>4 then pause,end
+