Mercurial > hg > octave-terminal
changeset 11850:f25094e43897 release-3-0-x
clear index before throwing error in Array indexed assignment functions
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sun, 21 Sep 2008 08:21:52 +0200 |
parents | 74802398931b |
children | 651401a1c39b |
files | liboctave/Array.cc liboctave/ChangeLog |
diffstat | 2 files changed, 54 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -2008,8 +2008,12 @@ retval = index (idx[0]); } else - (*current_liboctave_error_handler) - ("Array<T>::value: invalid number of indices specified"); + { + clear_index (); + + (*current_liboctave_error_handler) + ("Array<T>::value: invalid number of indices specified"); + } clear_index (); @@ -2532,6 +2536,8 @@ } else { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(I) = X: X must be a scalar or a vector with same length as I"); @@ -2540,6 +2546,8 @@ } else { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(I) = X: unable to resize A"); @@ -2560,11 +2568,17 @@ lhs.xelem (i) = rhs.elem (i); } else if (rhs_len != lhs_len) - (*current_liboctave_error_handler) - ("A(:) = X: A must be the same size as X"); + { + lhs.clear_index (); + + (*current_liboctave_error_handler) + ("A(:) = X: A must be the same size as X"); + } } else if (! (rhs_len == 1 || rhs_len == 0)) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A([]) = X: X must also be an empty matrix or a scalar"); @@ -2626,6 +2640,7 @@ break; default: + lhs.clear_index (); (*current_liboctave_error_handler) ("Array<T>::assign2: Dimension mismatch"); return 0; @@ -2740,6 +2755,8 @@ { if (! (rhs_is_scalar || (rhs_nr == 0 || rhs_nc == 0))) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A([], []) = X: X must be an empty matrix or a scalar"); @@ -2748,12 +2765,10 @@ } else { - (*current_liboctave_error_handler) - ("A(I, J) = X: X must be a scalar or the number of elements in I must"); + lhs.clear_index (); + (*current_liboctave_error_handler) - ("match the number of rows in X and the number of elements in J must"); - (*current_liboctave_error_handler) - ("match the number of columns in X"); + ("A(I, J) = X: X must be a scalar or the number of elements in I must match the number of rows in X and the number of elements in J must match the number of columns in X"); retval = 0; } @@ -2871,8 +2886,14 @@ else if (len == 0) { if (! (rhs_is_scalar || (rhs_nr == 0 || rhs_nc == 0))) - (*current_liboctave_error_handler) - ("A([]) = X: X must be an empty matrix or scalar"); + { + lhs.clear_index (); + + (*current_liboctave_error_handler) + ("A([]) = X: X must be an empty matrix or scalar"); + + retval = 0; + } } else if (len == rhs_nr * rhs_nc) { @@ -2914,6 +2935,8 @@ } else { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(I) = X: X must be a scalar or a matrix with the same size as I"); @@ -2960,6 +2983,8 @@ } else if (n_idx == 0) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("invalid number of indices for matrix expression"); @@ -2986,6 +3011,8 @@ { if (! (rhs_dims.all_ones () || rhs_dims.any_zero ())) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A([]) = X: X must be an empty matrix or scalar"); @@ -3034,6 +3061,8 @@ } else { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(I) = X: X must be a scalar or a matrix with the same size as I"); @@ -3145,6 +3174,8 @@ } else if (new_dims_numel != rhs_dims_numel || new_dims_vec > 1) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(IDX-LIST) = RHS: mismatched index and RHS dimension"); return retval; @@ -3172,6 +3203,8 @@ k++; else if (nelem != 1) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(IDX-LIST) = RHS: mismatched index and RHS dimension"); return retval; @@ -3214,6 +3247,8 @@ // be an error, because we don't know how to undo that // later... + lhs.clear_index (); + (*current_liboctave_error_handler) ("array index %d (= %d) for assignment requires invalid resizing operation", n_idx, new_dims(n_idx-1)); @@ -3340,6 +3375,8 @@ if (n != rhs.numel ()) { + lhs.clear_index (); + (*current_liboctave_error_handler) ("A(IDX-LIST) = X: X must be a scalar or size of X must equal number of elements indexed by IDX-LIST");
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,9 @@ +2008-09-19 John W. Eaton <jwe@octave.org> + + * Array.cc (assign1, assign2, assignN): + Clear lhs index before throwing error. + (Array<T>::value): Clear index before throwing error. + 2008-09-18 Jaroslav Hajek <highegg@gmail.com> * Array.cc (maybe_delete_elements_2 (idx_vector&)): Fix tests to get