Mercurial > octave-nkf
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; |