# HG changeset patch # User Rik # Date 1348292650 25200 # Node ID 13ffb3130b2fcc7ed8d5c92f1332c355ff8535d8 # Parent e1f59fd5775672774ca5991c676245aa02ea4a6b Fix isvarname to return false if input is not a string (bug #37389) * libinterp/interpfcn/utils.cc (isvarname): Redraft function to return false when input is not a string rather than printing an error. diff --git a/libinterp/interpfcn/utils.cc b/libinterp/interpfcn/utils.cc --- a/libinterp/interpfcn/utils.cc +++ b/libinterp/interpfcn/utils.cc @@ -99,19 +99,17 @@ @seealso{iskeyword, exist, who}\n\ @end deftypefn") { - octave_value retval; + octave_value retval = false; - int argc = args.length () + 1; - - string_vector argv = args.make_argv ("isvarname"); + int nargin = args.length (); - if (error_state) - return retval; - - if (argc == 2) - retval = valid_identifier (argv[1]) && ! is_keyword (argv[1]); - else + if (nargin != 1) print_usage (); + else if (args(0).is_string ()) + { + std::string varname = args(0).string_value (); + retval = valid_identifier (varname) && ! is_keyword (varname); + } return retval; } @@ -122,6 +120,7 @@ %!assert (isvarname ("_1"), true) %!assert (isvarname ("1foo"), false) %!assert (isvarname (""), false) +%!assert (isvarname (12), false) %!error isvarname () %!error isvarname ("foo", "bar");