comparison libinterp/corefcn/variables.cc @ 20616:fd0efcdb3718

use new string_value method to handle value extraction errors * dirfns.cc, file-io.cc, gammainc.cc, help.cc, load-path.cc, octave-link.cc, qz.cc, regexp.cc, strfns.cc, syscalls.cc, time.cc, variables.cc: Use new string_value method.
author John W. Eaton <jwe@octave.org>
date Thu, 08 Oct 2015 19:00:51 -0400
parents 4bed806ee3d4
children
comparison
equal deleted inserted replaced
20615:729a85dafba8 20616:fd0efcdb3718
145 145
146 retval = is_valid_function (arg, warn_for, 0); 146 retval = is_valid_function (arg, warn_for, 0);
147 147
148 if (! retval) 148 if (! retval)
149 { 149 {
150 if (arg.is_string ()) 150 std::string s = arg.string_value ("%s: expecting first argument to be a string",
151 { 151 warn_for.c_str ());
152 std::string s = arg.string_value (); 152
153 153 std::string cmd = header;
154 std::string cmd = header; 154 cmd.append (s);
155 cmd.append (s); 155 cmd.append (trailer);
156 cmd.append (trailer); 156
157 157 int parse_status;
158 int parse_status; 158
159 159 eval_string (cmd, true, parse_status, 0);
160 eval_string (cmd, true, parse_status, 0); 160
161 161 if (parse_status == 0)
162 if (parse_status == 0) 162 {
163 retval = is_valid_function (fname, warn_for, 0);
164
165 if (! retval)
163 { 166 {
164 retval = is_valid_function (fname, warn_for, 0); 167 error ("%s: '%s' is not valid as a function",
165 168 warn_for.c_str (), fname.c_str ());
166 if (! retval) 169 return retval;
167 {
168 error ("%s: '%s' is not valid as a function",
169 warn_for.c_str (), fname.c_str ());
170 return retval;
171 }
172
173 warning ("%s: passing function body as a string is obsolete; please use anonymous functions",
174 warn_for.c_str ());
175 } 170 }
176 else 171
177 error ("%s: '%s' is not valid as a function", 172 warning ("%s: passing function body as a string is obsolete; please use anonymous functions",
178 warn_for.c_str (), fname.c_str ()); 173 warn_for.c_str ());
179 } 174 }
180 else 175 else
181 error ("%s: expecting first argument to be a string", 176 error ("%s: '%s' is not valid as a function",
182 warn_for.c_str ()); 177 warn_for.c_str (), fname.c_str ());
183 } 178 }
184 179
185 return retval; 180 return retval;
186 } 181 }
187 182
593 588
594 int nargin = args.length (); 589 int nargin = args.length ();
595 590
596 if (nargin == 1 || nargin == 2) 591 if (nargin == 1 || nargin == 2)
597 { 592 {
598 if (args(0).is_string ()) 593 std::string name = args(0).string_value ("exist: NAME must be a string");
599 { 594
600 std::string name = args(0).string_value (); 595 if (nargin == 2)
601 596 {
602 if (nargin == 2) 597 std::string type = args(1).string_value ("exist: TYPE must be a string");
603 { 598
604 if (args(1).is_string ()) 599 if (type == "class")
605 { 600 warning ("exist: \"class\" type argument is not implemented");
606 std::string type = args(1).string_value (); 601
607 602 retval = symbol_exist (name, type);
608 if (type == "class")
609 warning ("exist: \"class\" type argument is not implemented");
610
611 retval = symbol_exist (name, type);
612 }
613 else
614 error ("exist: TYPE must be a string");
615 }
616 else
617 retval = symbol_exist (name);
618 } 603 }
619 else 604 else
620 error ("exist: NAME must be a string"); 605 retval = symbol_exist (name);
621 } 606 }
622 else 607 else
623 print_usage (); 608 print_usage ();
624 609
625 return retval; 610 return retval;
824 warning ("\"local\" has no effect outside a function"); 809 warning ("\"local\" has no effect outside a function");
825 } 810 }
826 811
827 if (nargin == 1) 812 if (nargin == 1)
828 { 813 {
829 std::string sval = args(0).string_value (); 814 std::string sval = args(0).string_value ("%s: argument must be a single character", nm);
830 815
831 if (! error_state) 816 switch (sval.length ())
832 { 817 {
833 switch (sval.length ()) 818 case 1:
834 { 819 var = sval[0];
835 case 1: 820 break;
836 var = sval[0]; 821
837 break; 822 case 0:
838 823 var = '\0';
839 case 0: 824 break;
840 var = '\0'; 825
841 break; 826 default:
842 827 error ("%s: argument must be a single character", nm);
843 default: 828 break;
844 error ("%s: argument must be a single character", nm); 829 }
845 break;
846 }
847 }
848 else
849 error ("%s: argument must be a single character", nm);
850 } 830 }
851 else if (nargin > 1) 831 else if (nargin > 1)
852 print_usage (); 832 print_usage ();
853 833
854 return retval; 834 return retval;
952 warning ("\"local\" has no effect outside a function"); 932 warning ("\"local\" has no effect outside a function");
953 } 933 }
954 934
955 if (nargin == 1) 935 if (nargin == 1)
956 { 936 {
957 if (args(0).is_string ()) 937 std::string sval = args(0).string_value ("%s: first argument must be a string", nm);
958 { 938
959 std::string sval = args(0).string_value (); 939 if (empty_ok || ! sval.empty ())
960 940 var = sval;
961 if (empty_ok || ! sval.empty ())
962 var = sval;
963 else
964 error ("%s: value must not be empty", nm);
965 }
966 else 941 else
967 error ("%s: first argument must be a string", nm); 942 error ("%s: value must not be empty", nm);
968 } 943 }
969 else if (nargin > 1) 944 else if (nargin > 1)
970 print_usage (); 945 print_usage ();
971 946
972 return retval; 947 return retval;
993 warning ("\"local\" has no effect outside a function"); 968 warning ("\"local\" has no effect outside a function");
994 } 969 }
995 970
996 if (nargin == 1) 971 if (nargin == 1)
997 { 972 {
998 if (args(0).is_string ()) 973 std::string sval = args(0).string_value ("%s: first argument must be a string", nm);
999 { 974
1000 std::string sval = args(0).string_value (); 975 int i = 0;
1001 976 for (; i < nchoices; i++)
1002 int i = 0; 977 {
1003 for (; i < nchoices; i++) 978 if (sval == choices[i])
1004 { 979 {
1005 if (sval == choices[i]) 980 var = i;
1006 { 981 break;
1007 var = i;
1008 break;
1009 }
1010 } 982 }
1011 if (i == nchoices) 983 }
1012 error ("%s: value not allowed (\"%s\")", nm, sval.c_str ()); 984 if (i == nchoices)
1013 } 985 error ("%s: value not allowed (\"%s\")", nm, sval.c_str ());
1014 else
1015 error ("%s: first argument must be a string", nm);
1016 } 986 }
1017 else if (nargin > 1) 987 else if (nargin > 1)
1018 print_usage (); 988 print_usage ();
1019 989
1020 return retval; 990 return retval;
2091 { 2061 {
2092 octave_value_list retval; 2062 octave_value_list retval;
2093 2063
2094 if (args.length () == 1) 2064 if (args.length () == 1)
2095 { 2065 {
2096 if (args(0).is_string ()) 2066 std::string name = args(0).string_value ("munlock: FCN must be a string");
2097 { 2067
2098 std::string name = args(0).string_value (); 2068 munlock (name);
2099 munlock (name);
2100 }
2101 else
2102 error ("munlock: FCN must be a string");
2103 } 2069 }
2104 else if (args.length () == 0) 2070 else if (args.length () == 0)
2105 { 2071 {
2106 octave_function *fcn = octave_call_stack::caller (); 2072 octave_function *fcn = octave_call_stack::caller ();
2107 2073
2129 { 2095 {
2130 octave_value retval; 2096 octave_value retval;
2131 2097
2132 if (args.length () == 1) 2098 if (args.length () == 1)
2133 { 2099 {
2134 if (args(0).is_string ()) 2100 std::string name = args(0).string_value ("mislocked: FCN must be a string");
2135 { 2101
2136 std::string name = args(0).string_value (); 2102 retval = mislocked (name);
2137 retval = mislocked (name);
2138 }
2139 else
2140 error ("mislocked: FCN must be a string");
2141 } 2103 }
2142 else if (args.length () == 0) 2104 else if (args.length () == 0)
2143 { 2105 {
2144 octave_function *fcn = octave_call_stack::caller (); 2106 octave_function *fcn = octave_call_stack::caller ();
2145 2107
2710 { 2672 {
2711 octave_value retval; 2673 octave_value retval;
2712 2674
2713 if (args.length () == 1) 2675 if (args.length () == 1)
2714 { 2676 {
2715 std::string name = args(0).string_value (); 2677 std::string name = args(0).string_value ("__varval__: expecting argument to be variable name");
2716 2678
2717 if (! error_state) 2679 retval = symbol_table::varval (args(0).string_value ());
2718 retval = symbol_table::varval (args(0).string_value ());
2719 else
2720 error ("__varval__: expecting argument to be variable name");
2721 } 2680 }
2722 else 2681 else
2723 print_usage (); 2682 print_usage ();
2724 2683
2725 return retval; 2684 return retval;