changeset 13785:daf81e42960c

allow nargin to work for functions that are not already loaded * ov-usr-fcn.cc (Fnargin): Call symbol_table::find_function, not symbol_table::find_user_function.
author John W. Eaton <jwe@octave.org>
date Tue, 01 Nov 2011 20:48:22 -0400
parents 0bbe319bf26b
children 40dab5d70115
files src/ov-usr-fcn.cc
diffstat 1 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/ov-usr-fcn.cc	Tue Nov 01 19:57:38 2011 -0400
+++ b/src/ov-usr-fcn.cc	Tue Nov 01 20:48:22 2011 -0400
@@ -648,23 +648,33 @@
 
       if (! error_state)
         {
-          octave_value fcn_val = symbol_table::find_user_function (fname);
+          octave_value fcn_val = symbol_table::find_function (fname);
 
-          octave_user_function *fcn = fcn_val.user_function_value (true);
-
-          if (fcn)
+          if (fcn_val.is_user_function ())
             {
-              if (fcn->takes_varargs ())
-                retval = -1;
-              else
+              octave_user_function *fcn = fcn_val.user_function_value (true);
+
+              if (fcn)
                 {
-                  tree_parameter_list *param_list = fcn->parameter_list ();
+                  if (fcn->takes_varargs ())
+                    retval = -1;
+                  else
+                    {
+                      tree_parameter_list *param_list = fcn->parameter_list ();
 
-                  retval = param_list ? param_list->length () : 0;
+                      retval = param_list ? param_list->length () : 0;
+                    }
                 }
+              else
+                error ("nargin: loading user-defined function failed");
             }
           else
-            error ("nargin: invalid function");
+            {
+              // FIXME -- what about built-in functions or functions
+              // defined in .oct files or .mex files?
+
+              error ("nargin: FCN_NAME must be a user-defined function");
+            }
         }
       else
         error ("nargin: FCN_NAME must be a string");