changeset 9005:f26e0f00ce01

fix simple looping over structs
author Jaroslav Hajek <highegg@gmail.com>
date Sun, 22 Mar 2009 21:44:26 +0100
parents 17ba311ef110
children 979d0492ff40
files src/ChangeLog src/pt-eval.cc
diffstat 2 files changed, 12 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2009-03-22  Jaroslav Hajek  <highegg@gmail.com>
+
+	* pt-eval.cc (tree_evaluator::visit_simple_for_command):
+	Remove struct branch, handle structs by the generic code.
+	(tree_evaluator::visit_complex_for_command):
+	Add missing const qualifiers.
+
 2009-03-21  Jaroslav Hajek  <highegg@gmail.com>
 
 	* ov-base-diag.cc: Add missing include.
--- a/src/pt-eval.cc
+++ b/src/pt-eval.cc
@@ -339,8 +339,8 @@
 
 	DO_SIMPLE_FOR_LOOP_ONCE (rhs);
       }
-    else if (rhs.is_matrix_type () 
-             || rhs.is_cell () || rhs.is_string ())
+    else if (rhs.is_matrix_type () || rhs.is_cell () || rhs.is_string ()
+             || rhs.is_map ())
       {
         // A matrix or cell is reshaped to 2 dimensions and iterated by
         // columns.
@@ -384,27 +384,6 @@
               }
           }
       }
-    else if (rhs.is_map ())
-      {
-	Octave_map tmp_val (rhs.map_value ());
-
-	bool quit = false;
-
-	for (Octave_map::iterator p = tmp_val.begin ();
-	     p != tmp_val.end ();
-	     p++)
-	  {
-	    Cell val_lst = tmp_val.contents (p);
-
-	    octave_value val
-	      = (val_lst.length () == 1) ? val_lst(0) : octave_value (val_lst);
-
-	    DO_SIMPLE_FOR_LOOP_ONCE (val);
-
-	    if (quit)
-	      break;
-	  }
-      }
     else
       {
 	::error ("invalid type in for loop expression near line %d, column %d",
@@ -456,15 +435,15 @@
 
       octave_lvalue key_ref = elt->lvalue ();
 
-      Octave_map tmp_val (rhs.map_value ());
+      const Octave_map tmp_val (rhs.map_value ());
 
       tree_statement_list *loop_body = cmd.body ();
 
-      for (Octave_map::iterator q = tmp_val.begin (); q != tmp_val.end (); q++)
+      for (Octave_map::const_iterator q = tmp_val.begin (); q != tmp_val.end (); q++)
 	{
 	  octave_value key = tmp_val.key (q);
 
-	  Cell val_lst = tmp_val.contents (q);
+	  const Cell val_lst = tmp_val.contents (q);
 
 	  octave_idx_type n = tmp_val.numel ();