Mercurial > jwe > octave
changeset 30290:fca639cb78b8
detect fcn called with too many args when arg list not present (bug #61471)
* pt-eval.cc (tree_evaluator::define_parameter_list_from_arg_vector):
Check for valid param_list here.
(tree_evaluator::execute_user_function): Not here. Also check for
function call with too many arguments when param_list is nullptr.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 12 Nov 2021 15:16:05 -0500 |
parents | 4aa5b391f0d3 |
children | b8a8abd1b1ba |
files | libinterp/parse-tree/pt-eval.cc |
diffstat | 1 files changed, 17 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-eval.cc Fri Nov 12 13:39:40 2021 -0500 +++ b/libinterp/parse-tree/pt-eval.cc Fri Nov 12 15:16:05 2021 -0500 @@ -2199,6 +2199,9 @@ tree_evaluator::define_parameter_list_from_arg_vector (tree_parameter_list *param_list, const octave_value_list& args) { + if (! param_list || param_list->varargs_only ()) + return; + int i = -1; for (tree_decl_elt *elt : *param_list) @@ -3395,21 +3398,24 @@ tree_parameter_list *param_list = user_function.parameter_list (); + bool takes_varargs = false; + int max_inputs = 0; + if (param_list) { - int max_inputs = param_list->length (); - - if (! param_list->takes_varargs () && nargin > max_inputs) - { - std::string name = user_function.name (); - - error ("%s: function called with too many inputs", name.c_str ()); - } - - if (! param_list->varargs_only ()) - define_parameter_list_from_arg_vector (param_list, args); + takes_varargs = param_list->takes_varargs (); + max_inputs = param_list->length (); } + if (! takes_varargs && nargin > max_inputs) + { + std::string name = user_function.name (); + + error ("%s: function called with too many inputs", name.c_str ()); + } + + define_parameter_list_from_arg_vector (param_list, args); + tree_parameter_list *ret_list = user_function.return_list (); if (ret_list && ! ret_list->takes_varargs ())