diff src/parse.y @ 3156:a494f93e60ff

[project @ 1998-02-20 07:47:48 by jwe]
author jwe
date Fri, 20 Feb 1998 07:47:52 +0000
parents fe2d1ae8926b
children 7c96e85c76db
line wrap: on
line diff
--- a/src/parse.y	Wed Feb 18 21:51:50 1998 +0000
+++ b/src/parse.y	Fri Feb 20 07:47:52 1998 +0000
@@ -31,6 +31,8 @@
 #include <config.h>
 #endif
 
+#include <cstdio>
+
 #ifdef YYBYACC
 #include <cstdlib>
 #endif
@@ -2913,31 +2915,47 @@
 }
 
 octave_value_list
+feval (const string& name, const octave_value_list& args, int nargout)
+{
+  octave_value_list retval;
+
+  octave_function *fcn = is_valid_function (name, "feval", 1);
+
+  if (fcn)
+    retval = fcn->do_index_op (nargout, args);
+
+  return retval;
+}
+
+octave_value_list
 feval (const octave_value_list& args, int nargout)
 {
   octave_value_list retval;
 
-  octave_function *fcn = is_valid_function (args(0), "feval", 1);
-
-  if (fcn)
+  if (args.length () > 0)
     {
-      string_vector arg_names = args.name_tags ();
-
-      int tmp_nargin = args.length () - 1;
-
-      octave_value_list tmp_args (tmp_nargin, octave_value ());
-
-      string_vector tmp_arg_names (tmp_nargin);
-
-      for (int i = 0; i < tmp_nargin; i++)
+      string name = args(0).string_value ();
+
+      if (! error_state)
 	{
-	  tmp_args(i) = args(i+1);
-	  tmp_arg_names(i) = arg_names(i+1);
+	  string_vector arg_names = args.name_tags ();
+
+	  int tmp_nargin = args.length () - 1;
+
+	  octave_value_list tmp_args (tmp_nargin, octave_value ());
+
+	  string_vector tmp_arg_names (tmp_nargin);
+
+	  for (int i = 0; i < tmp_nargin; i++)
+	    {
+	      tmp_args(i) = args(i+1);
+	      tmp_arg_names(i) = arg_names(i+1);
+	    }
+
+	  tmp_args.stash_name_tags (tmp_arg_names);
+
+	  retval = feval (name, tmp_args, nargout);
 	}
-
-      tmp_args.stash_name_tags (tmp_arg_names);
-
-      retval = fcn->do_index_op (nargout, tmp_args);
     }
 
   return retval;