Bug #11396 fixed - Overloading : Operation toto([])=[] with toto being an mlist failed. 22/8222/2
steer [Fri, 20 Jul 2012 13:20:34 +0000 (15:20 +0200)]
Change-Id: Ibcfe2e6c82b3886ba8b756f3ce379971edded455

scilab/CHANGES_5.4.X
scilab/modules/data_structures/src/fortran/intl_i.f
scilab/modules/data_structures/tests/nonreg_tests/bug_11396.dia.ref [new file with mode: 0644]
scilab/modules/data_structures/tests/nonreg_tests/bug_11396.tst [new file with mode: 0644]

index b7e7f5f..0ba439f 100644 (file)
@@ -134,6 +134,8 @@ Bug Fixes
 * Bug #11385 fixed - length() returned a wrong error message when called without
                      input argument.
 
+* Bug #11396 fixed - Overloading: toto([])=[] with toto being an mlist failed.
+
 * Bug #11398 fixed - newest() produced an incomprehensible error message when
                      called with a string vector as second input argument.
 
index 46f7072..6695d82 100644 (file)
@@ -86,7 +86,12 @@ c     get arg1
       il1=iadr(lstk(top))
       if(istk(il1).lt.0) il1=iadr(istk(il1+1))
       m1=istk(il1+1)
-
+      if (abs(istk(il1)).eq.1.and.m1.eq.0)  then
+c     .  arg3([])=arg2 -->overloading
+         top=top3
+         fin=-fin
+         return
+      endif
       ilind=iadr(lw)
 c
 c     get room for index list
diff --git a/scilab/modules/data_structures/tests/nonreg_tests/bug_11396.dia.ref b/scilab/modules/data_structures/tests/nonreg_tests/bug_11396.dia.ref
new file mode 100644 (file)
index 0000000..9658c0c
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 11396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11396
+//
+// <-- Short Description -->
+// Operation toto([])=[] with toto being an mlist fails.
+function a=%s_i_toto(i,b,a),
+  if i<>[]&b<>[] then error("Invalid index");end;
+endfunction
+A=mlist(["toto","a"],1:4);
+B=A;
+A([])=[];
+assert_checkequal(A,B);
diff --git a/scilab/modules/data_structures/tests/nonreg_tests/bug_11396.tst b/scilab/modules/data_structures/tests/nonreg_tests/bug_11396.tst
new file mode 100644 (file)
index 0000000..5b66c6f
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 11396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11396
+//
+// <-- Short Description -->
+// Operation toto([])=[] with toto being an mlist fails.
+
+
+function a=%s_i_toto(i,b,a),
+  if i<>[]&b<>[] then error("Invalid index");end;
+endfunction
+
+
+
+A=mlist(["toto","a"],1:4);
+B=A;
+A([])=[];
+assert_checkequal(A,B);
+