diff src/pt-arg-list.cc @ 3977:95663a3a2682

[project @ 2002-07-05 17:43:37 by jwe]
author jwe
date Fri, 05 Jul 2002 17:43:38 +0000
parents d14c483b3c12
children b79da8779a0e
line wrap: on
line diff
--- a/src/pt-arg-list.cc
+++ b/src/pt-arg-list.cc
@@ -55,6 +55,25 @@
     }
 }
 
+int
+tree_argument_list::nargout_count (void) const
+{
+  int retval = 0;
+
+  for (Pix p = first (); p != 0; next (p))
+    {
+      tree_expression *elt = this->operator () (p);
+
+      // XXX FIXME XXX -- need to be able to determine whether elt is
+      // an expression that could evaluate to a cs-list object, and if
+      // so, how many elements are in that list.  Ugly!
+
+      retval++;
+    }
+
+  return retval;
+}
+
 bool
 tree_argument_list::all_elements_are_constant (void) const
 {
@@ -79,7 +98,8 @@
   // token.
 
   octave_value_list args;
-  args.resize (len);
+  int args_len = len;
+  args.resize (args_len);
 
   Pix p = first ();
   int j = 0;
@@ -106,6 +126,8 @@
 		      octave_value_list tva;
 		      tva = curr_function->octave_all_va_args ();
 		      int n = tva.length ();
+		      args_len += n - 1;
+		      args.resize (args_len);
 		      for (int i = 0; i < n; i++)
 			args(j++) = tva(i);
 		    }
@@ -116,6 +138,15 @@
 		      break;
 		    }
 		}
+	      else if (tmp.is_cs_list ())
+		{
+		  octave_value_list tl = tmp.list_value ();
+		  int n = tl.length ();
+		  args_len += n - 1;
+		  args.resize (args_len);
+		  for (int i = 0; i < n; i++)
+		    args(j++) = tl(i);
+		}
 	      else
 		args(j++) = tmp;
 	    }