changeset 4582:db5a24d54915

[project @ 2003-10-31 15:11:45 by jwe]
author jwe
date Fri, 31 Oct 2003 15:11:45 +0000
parents f99c430316cd
children 70da2b8c91dd
files src/ChangeLog src/ov-cell.cc src/ov.cc
diffstat 3 files changed, 26 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Oct 31 14:42:07 2003 +0000
+++ b/src/ChangeLog	Fri Oct 31 15:11:45 2003 +0000
@@ -1,5 +1,11 @@
 2003-10-31  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
+	* ov-cell.cc (octave_cell::subsref): When indexing with '{', quit
+	early if an error occurs in do_index_op.
+
+	* ov.cc (octave_value::next_subsref): Don't do anything if
+	error_state is true.
+
 	* cutils.c (octave_usleep) [HAVE_SELECT]: Introduce new local
 	scope for declaration of delay.
 	[HAVE_POLL]: Likewise, for delay and pfd.
--- a/src/ov-cell.cc	Fri Oct 31 14:42:07 2003 +0000
+++ b/src/ov-cell.cc	Fri Oct 31 15:11:45 2003 +0000
@@ -67,23 +67,26 @@
       {
 	octave_value tmp = do_index_op (idx.front ());
 
-	Cell tcell = tmp.cell_value ();
-
-	if (tcell.length () == 1)
-	  retval = tcell(0,0);
-	else
+	if (! error_state)
 	  {
-	    int nr = tcell.rows ();
-	    int nc = tcell.columns ();
-	    octave_value_list lst (nr * nc, octave_value ());
-	    int k = 0;
-	    for (int j = 0; j < nc; j++)
-	      for (int i = 0; i < nr; i++)
-		{
-		  OCTAVE_QUIT;
-		  lst(k++) = tcell(i,j);
-		}
-	    retval = octave_value (lst, true);
+	    Cell tcell = tmp.cell_value ();
+
+	    if (tcell.length () == 1)
+	      retval = tcell(0,0);
+	    else
+	      {
+		int nr = tcell.rows ();
+		int nc = tcell.columns ();
+		octave_value_list lst (nr * nc, octave_value ());
+		int k = 0;
+		for (int j = 0; j < nc; j++)
+		  for (int i = 0; i < nr; i++)
+		    {
+		      OCTAVE_QUIT;
+		      lst(k++) = tcell(i,j);
+		    }
+		retval = octave_value (lst, true);
+	      }
 	  }
       }
       break;
--- a/src/ov.cc	Fri Oct 31 14:42:07 2003 +0000
+++ b/src/ov.cc	Fri Oct 31 15:11:45 2003 +0000
@@ -690,7 +690,7 @@
 			    const std::list<octave_value_list>& idx,
 			    size_t skip) 
 {
-  if (idx.size () > skip)
+  if (! error_state && idx.size () > skip)
     {
       std::list<octave_value_list> new_idx (idx);
       for (size_t i = 0; i < skip; i++)