comparison libinterp/interpfcn/utils.cc @ 15435:13ffb3130b2f

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.
author Rik <rik@octave.org>
date Fri, 21 Sep 2012 22:44:10 -0700
parents 9020dddc925a
children 049e8bbff782
comparison
equal deleted inserted replaced
15434:e1f59fd57756 15435:13ffb3130b2f
97 @deftypefn {Built-in Function} {} isvarname (@var{name})\n\ 97 @deftypefn {Built-in Function} {} isvarname (@var{name})\n\
98 Return true if @var{name} is a valid variable name.\n\ 98 Return true if @var{name} is a valid variable name.\n\
99 @seealso{iskeyword, exist, who}\n\ 99 @seealso{iskeyword, exist, who}\n\
100 @end deftypefn") 100 @end deftypefn")
101 { 101 {
102 octave_value retval; 102 octave_value retval = false;
103 103
104 int argc = args.length () + 1; 104 int nargin = args.length ();
105 105
106 string_vector argv = args.make_argv ("isvarname"); 106 if (nargin != 1)
107
108 if (error_state)
109 return retval;
110
111 if (argc == 2)
112 retval = valid_identifier (argv[1]) && ! is_keyword (argv[1]);
113 else
114 print_usage (); 107 print_usage ();
108 else if (args(0).is_string ())
109 {
110 std::string varname = args(0).string_value ();
111 retval = valid_identifier (varname) && ! is_keyword (varname);
112 }
115 113
116 return retval; 114 return retval;
117 } 115 }
118 116
119 /* 117 /*
120 %!assert (isvarname ("foo"), true) 118 %!assert (isvarname ("foo"), true)
121 %!assert (isvarname ("_foo"), true) 119 %!assert (isvarname ("_foo"), true)
122 %!assert (isvarname ("_1"), true) 120 %!assert (isvarname ("_1"), true)
123 %!assert (isvarname ("1foo"), false) 121 %!assert (isvarname ("1foo"), false)
124 %!assert (isvarname (""), false) 122 %!assert (isvarname (""), false)
123 %!assert (isvarname (12), false)
125 124
126 %!error isvarname () 125 %!error isvarname ()
127 %!error isvarname ("foo", "bar"); 126 %!error isvarname ("foo", "bar");
128 */ 127 */
129 128