diff src/pt-misc.cc @ 6215:516d3071b34c

[project @ 2006-12-15 03:24:12 by jwe]
author jwe
date Fri, 15 Dec 2006 03:24:13 +0000
parents 2a6cb4ed8f1e
children 93c65f2a5668
line wrap: on
line diff
--- a/src/pt-misc.cc	Fri Dec 08 22:15:04 2006 +0000
+++ b/src/pt-misc.cc	Fri Dec 15 03:24:13 2006 +0000
@@ -54,7 +54,7 @@
 {
   for (iterator p = begin (); p != end (); p++)
     {
-      tree_identifier *elt = *p;
+      tree_decl_elt *elt = *p;
       elt->mark_as_formal_parameter ();
     }
 }
@@ -73,7 +73,7 @@
       if (++count > nargout)
 	break;
 
-      tree_identifier *elt = *p;
+      tree_decl_elt *elt = *p;
 
       if (! elt->is_defined ())
 	{
@@ -99,16 +99,13 @@
 {
   int nargin = args.length ();
 
-  if (nargin <= 0)
-    return;
-
   int expected_nargin = length ();
 
   iterator p = begin ();
 
   for (int i = 0; i < expected_nargin; i++)
     {
-      tree_identifier *elt = *p++;
+      tree_decl_elt *elt = *p++;
 
       octave_lvalue ref = elt->lvalue ();
 
@@ -116,14 +113,17 @@
 	{
 	  if (args(i).is_defined () && args(i).is_magic_colon ())
 	    {
-	      ::error ("invalid use of colon in function argument list");
-	      return;
+	      if (! elt->eval ())
+		{
+		  ::error ("no default value for argument %d\n", i+1);
+		  return;
+		}
 	    }
-
-	  ref.assign (octave_value::op_asn_eq, args(i));
+	  else
+	    ref.assign (octave_value::op_asn_eq, args(i));
 	}
       else
-	ref.assign (octave_value::op_asn_eq, octave_value ());
+	elt->eval ();
     }
 }
 
@@ -136,7 +136,7 @@
 
   for (int i = 0; i < len; i++)
     {
-      tree_identifier *elt = *p++;
+      tree_decl_elt *elt = *p++;
 
       octave_lvalue ref = elt->lvalue ();
 
@@ -157,7 +157,7 @@
 
   for (iterator p = begin (); p != end (); p++)
     {
-      tree_identifier *elt = *p;
+      tree_decl_elt *elt = *p;
 
       retval(i++) = elt->is_defined () ? elt->rvalue () : octave_value ();
     }
@@ -175,7 +175,7 @@
 
   for (iterator p = begin (); p != end (); p++)
     {
-      tree_identifier *elt = *p;
+      tree_decl_elt *elt = *p;
 
       if (! elt->is_defined ())
 	{
@@ -197,7 +197,7 @@
 
   for (iterator p = begin (); p != end (); p++)
     {
-      tree_identifier *elt = *p;
+      tree_decl_elt *elt = *p;
 
       new_list->append (elt->dup (sym_tab));
     }