# HG changeset patch # User Jaroslav Hajek # Date 1231656944 -3600 # Node ID fd11a08a9b31635c352b86a79964563321771760 # Parent aaf2b6d6813c42145ba9c8fb6bd8da68507a17dd disallow invalid {}-indexed assigments diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/ChangeLog --- a/scripts/ChangeLog Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/ChangeLog Sun Jan 11 07:55:44 2009 +0100 @@ -1,3 +1,12 @@ +2009-01-11 Jaroslav Hajek + + * general/sortrows.m: Fix invalid `{x:y} = z' assignment. + * miscellaneous/orderfields.m: Dtto. + * miscellaneous/what.m: Dtto. + * pkg/pkg.m: Dtto. + * plot/ndgrid.m: Dtto. + * strings/strcat.m: Dtto. + 2009-01-09 Kai Habel * plot/surfl.m: New function diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/general/sortrows.m --- a/scripts/general/sortrows.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/general/sortrows.m Sun Jan 11 07:55:44 2009 +0100 @@ -34,7 +34,7 @@ other_mode = "descend"; if (nargin < 2) indices = [1:size(m,2)]'; - mode{1:size(m,2)} = default_mode; + mode(1:size(m,2)) = {default_mode}; else for ii = 1:length (c); if (c(ii) < 0) diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/miscellaneous/orderfields.m --- a/scripts/miscellaneous/orderfields.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/miscellaneous/orderfields.m Sun Jan 11 07:55:44 2009 +0100 @@ -90,7 +90,7 @@ if (numel (s1) == 0) args = cell (1, 2 * numel (names)); args(1:2:end) = names; - args{2:2:end} = {}; + args(2:2:end) = {[]}; t = struct (args{:}); else for i = 1:numel (names) diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/miscellaneous/what.m --- a/scripts/miscellaneous/what.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/miscellaneous/what.m Sun Jan 11 07:55:44 2009 +0100 @@ -107,8 +107,7 @@ for i = 1 : nrows args = f(i:nrows:end); if (length (args) < ncols) - n = ncols - length (args); - args{end : end + n} = ""; + args(end : ncols) = {""}; endif printf (fmt, args{:}); endfor diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/pkg/pkg.m --- a/scripts/pkg/pkg.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/pkg/pkg.m Sun Jan 11 07:55:44 2009 +0100 @@ -971,11 +971,11 @@ describe_all = false; if (any (strcmp ("all", pkgnames))) describe_all = true; - flag{1:num_packages} = "Not Loaded"; + flag(1:num_packages) = {"Not Loaded"}; num_pkgnames = num_packages; else num_pkgnames = length (pkgnames); - flag{1:num_pkgnames} = "Not installed"; + flag(1:num_pkgnames) = {"Not installed"}; endif for i = 1:num_packages diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/plot/ndgrid.m --- a/scripts/plot/ndgrid.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/plot/ndgrid.m Sun Jan 11 07:55:44 2009 +0100 @@ -37,7 +37,7 @@ if (nargin == 1) n = max ([nargout, 2]); ## If only one input argument is given, repeat it n-times - varargin{1:n} = varargin{1}; + varargin(1:n) = varargin(1); elseif (nargin >= nargout) n = max ([nargin, 2]); else diff -r aaf2b6d6813c -r fd11a08a9b31 scripts/strings/strcat.m --- a/scripts/strings/strcat.m Sat Jan 10 08:46:23 2009 +0100 +++ b/scripts/strings/strcat.m Sun Jan 11 07:55:44 2009 +0100 @@ -86,7 +86,7 @@ for nv = find (numstrs == 1) str = varargin{nv}{1}; varargin{nv} = cell (dim); - varargin{nv}{:} = str; + varargin{nv}(:) = {str}; endfor ## Concatenate the strings diff -r aaf2b6d6813c -r fd11a08a9b31 src/ChangeLog --- a/src/ChangeLog Sat Jan 10 08:46:23 2009 +0100 +++ b/src/ChangeLog Sun Jan 11 07:55:44 2009 +0100 @@ -1,3 +1,10 @@ +2009-01-11 Jaroslav Hajek + + * oct-obj.cc (octave_value_list::all_scalars): New method. + * oct-obj.h: Declare it. + * ov-cell.cc (octave_cell::subsasgn): Disable assigning + to non-scalar {}-indexed cell, unless in a multi-assignment. + 2009-01-10 Jaroslav Hajek * DLD-FUNCTIONS/sparse.cc (Ffull): Convert diagonal & permutation diff -r aaf2b6d6813c -r fd11a08a9b31 src/oct-obj.cc --- a/src/oct-obj.cc Sat Jan 10 08:46:23 2009 +0100 +++ b/src/oct-obj.cc Sun Jan 11 07:55:44 2009 +0100 @@ -162,6 +162,16 @@ } bool +octave_value_list::all_scalars (void) const +{ + octave_idx_type n = length (), i; + + for (i = 0; i < n && elem (i).is_string (); i++) ; + + return i == n; +} + +bool octave_value_list::has_magic_colon (void) const { octave_idx_type n = length (); diff -r aaf2b6d6813c -r fd11a08a9b31 src/oct-obj.h --- a/src/oct-obj.h Sat Jan 10 08:46:23 2009 +0100 +++ b/src/oct-obj.h Sun Jan 11 07:55:44 2009 +0100 @@ -111,6 +111,8 @@ bool all_strings_p (void) const; + bool all_scalars (void) const; + bool has_magic_colon (void) const; string_vector make_argv (const std::string& = std::string()) const; diff -r aaf2b6d6813c -r fd11a08a9b31 src/ov-cell.cc --- a/src/ov-cell.cc Sat Jan 10 08:46:23 2009 +0100 +++ b/src/ov-cell.cc Sun Jan 11 07:55:44 2009 +0100 @@ -268,9 +268,11 @@ octave_base_matrix::assign (i, tmp_cell); } - else - // Regularize a null matrix if stored into a struct component. - octave_base_matrix::assign (i, Cell (t_rhs.non_null_value ())); + else if (i.all_scalars () || do_index_op (i, true).dims ().numel () == 1) + // Regularize a null matrix if stored into a cell. + octave_base_matrix::assign (i, Cell (t_rhs.non_null_value ())); + else if (! error_state) + error ("scalar indices required for {} in assignment."); if (! error_state) {