Mercurial > octave
annotate libinterp/corefcn/variables.cc @ 29033:c27ce309c079
maint: merge stable to default.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 05 Nov 2020 18:43:39 -0500 |
parents | 11f1207111c5 2cbfd91aafb9 |
children | 65c57984a65e |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 1993-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
1 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21272
diff
changeset
|
27 # include "config.h" |
1 | 28 #endif |
29 | |
1468 | 30 #include <cstdio> |
1343 | 31 #include <cstring> |
605 | 32 |
7336 | 33 #include <iomanip> |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
34 #include <list> |
4207 | 35 #include <set> |
1728 | 36 #include <string> |
37 | |
2926 | 38 #include "file-stat.h" |
39 #include "oct-env.h" | |
4604 | 40 #include "file-ops.h" |
2926 | 41 #include "glob-match.h" |
16940
99122191d3dd
maint: Rename regexp.h to lo-regexp.h, regexp.cc to lo-regexp.cc in liboctave.
Rik <rik@octave.org>
parents:
16892
diff
changeset
|
42 #include "lo-regexp.h" |
1755 | 43 #include "str-vec.h" |
44 | |
4435 | 45 #include "Cell.h" |
1352 | 46 #include "defun.h" |
47 #include "error.h" | |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21095
diff
changeset
|
48 #include "errwarn.h" |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
49 #include "event-manager.h" |
1352 | 50 #include "help.h" |
3165 | 51 #include "input.h" |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23332
diff
changeset
|
52 #include "interpreter-private.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22091
diff
changeset
|
53 #include "interpreter.h" |
1352 | 54 #include "lex.h" |
5832 | 55 #include "load-path.h" |
20925
667861ffffab
Extracted header class octave-preserve-stream-state from utils.{cc/h}.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
20909
diff
changeset
|
56 #include "octave-preserve-stream-state.h" |
2926 | 57 #include "oct-map.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
58 #include "ovl.h" |
2926 | 59 #include "ov.h" |
9240
f27a8c07f0b2
clear -classes and support.
Robert T. Short <octave@phaselockedsystems.com>
parents:
9180
diff
changeset
|
60 #include "ov-class.h" |
3933 | 61 #include "ov-usr-fcn.h" |
605 | 62 #include "pager.h" |
1352 | 63 #include "parse.h" |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
26843
diff
changeset
|
64 #include "pt-eval.h" |
26088
2b92498c111e
move symbol_info and symbol_info_list classes to separate file
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
65 #include "syminfo.h" |
2926 | 66 #include "symtab.h" |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26687
diff
changeset
|
67 #include "sysdep.h" |
1352 | 68 #include "unwind-prot.h" |
1 | 69 #include "utils.h" |
1352 | 70 #include "variables.h" |
2205 | 71 |
593 | 72 // Attributes of variables and functions. |
73 | |
2086 | 74 // Is this octave_value a valid function? |
593 | 75 |
2975 | 76 octave_function * |
4345 | 77 is_valid_function (const std::string& fcn_name, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
78 const std::string& warn_for, bool warn) |
593 | 79 { |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
80 octave_function *ans = nullptr; |
593 | 81 |
1755 | 82 if (! fcn_name.empty ()) |
3618 | 83 { |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
84 octave::symbol_table& symtab |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
85 = octave::__get_symbol_table__ ("is_valid_function"); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
86 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
87 octave_value val = symtab.find_function (fcn_name); |
7336 | 88 |
89 if (val.is_defined ()) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
90 ans = val.function_value (true); |
3618 | 91 } |
593 | 92 |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
93 // FIXME: Should this be "err" and "error_for", rather than warn? |
7336 | 94 if (! ans && warn) |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
95 error ("%s: the symbol '%s' is not valid as a function", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
96 warn_for.c_str (), fcn_name.c_str ()); |
593 | 97 |
98 return ans; | |
99 } | |
100 | |
2975 | 101 octave_function * |
4345 | 102 is_valid_function (const octave_value& arg, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
103 const std::string& warn_for, bool warn) |
3178 | 104 { |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
105 octave_function *ans = nullptr; |
3178 | 106 |
3523 | 107 std::string fcn_name; |
3178 | 108 |
109 if (arg.is_string ()) | |
4700 | 110 { |
111 fcn_name = arg.string_value (); | |
3178 | 112 |
19743
67f2c76f9f4d
Remove unnecessary checking of error_state after is_string validation.
Rik <rik@octave.org>
parents:
19718
diff
changeset
|
113 ans = is_valid_function (fcn_name, warn_for, warn); |
4700 | 114 } |
3178 | 115 else if (warn) |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
116 // FIXME: Should this be "err" and "error_for", rather than warn? |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22333
diff
changeset
|
117 error ("%s: argument must be a string containing function name", |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22333
diff
changeset
|
118 warn_for.c_str ()); |
3178 | 119 |
120 return ans; | |
121 } | |
122 | |
123 octave_function * | |
3523 | 124 extract_function (const octave_value& arg, const std::string& warn_for, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
125 const std::string& fname, const std::string& header, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
126 const std::string& trailer) |
2796 | 127 { |
26434
fad593da4b57
variables.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
128 octave_function *retval = is_valid_function (arg, warn_for, 0); |
2796 | 129 |
130 if (! retval) | |
131 { | |
24218
3d26a174e143
* variables.cc (extract_function): Omit 'first' from error message.
John W. Eaton <jwe@octave.org>
parents:
24070
diff
changeset
|
132 std::string s = arg.xstring_value ("%s: argument must be a string", |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
133 warn_for.c_str ()); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
134 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
135 std::string cmd = header; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
136 cmd.append (s); |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
137 cmd.append (trailer); |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
138 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
139 int parse_status; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
140 |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26107
diff
changeset
|
141 octave::interpreter& interp |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26107
diff
changeset
|
142 = octave::__get_interpreter__ ("extract_function"); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26107
diff
changeset
|
143 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26107
diff
changeset
|
144 interp.eval_string (cmd, true, parse_status, 0); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
145 |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
146 if (parse_status != 0) |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
147 error ("%s: '%s' is not valid as a function", |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
148 warn_for.c_str (), fname.c_str ()); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
149 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
150 retval = is_valid_function (fname, warn_for, 0); |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
151 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
152 if (! retval) |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
153 error ("%s: '%s' is not valid as a function", |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
154 warn_for.c_str (), fname.c_str ()); |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
155 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
156 warning ("%s: passing function body as a string is obsolete; please use anonymous functions", |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
157 warn_for.c_str ()); |
2796 | 158 } |
159 | |
160 return retval; | |
161 } | |
162 | |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
163 DEFMETHOD (isglobal, interp, args, , |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
164 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
165 @deftypefn {} {} isglobal (@var{name}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
166 Return true if @var{name} is a globally visible variable. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
167 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
168 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
169 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
170 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
171 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
172 global x |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
173 isglobal ("x") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
174 @result{} 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
175 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
176 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
177 @seealso{isvarname, exist} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
178 @end deftypefn */) |
5930 | 179 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
180 if (args.length () != 1) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
181 print_usage (); |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
182 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
183 std::string name = args(0).xstring_value ("isglobal: NAME must be a string"); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
184 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
185 return ovl (interp.isglobal (name)); |
5930 | 186 } |
187 | |
21389
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
188 /* |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
189 %!test |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
190 %! global x; |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21568
diff
changeset
|
191 %! assert (isglobal ("x"), true); |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25646
diff
changeset
|
192 %! clear -global x; # cleanup after test |
21389
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
193 |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
194 %!error isglobal () |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
195 %!error isglobal ("a", "b") |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
196 %!error isglobal (1) |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
197 */ |
64efef931bd0
Add BIST tests for bitpack, bitunpack, isglobal, and typecast
Mike Miller <mtmiller@octave.org>
parents:
21317
diff
changeset
|
198 |
23143
898c33f4b9c0
declare some functions that are only used once "static"
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
199 static int |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
200 symbol_exist (octave::interpreter& interp, const std::string& name, |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
201 const std::string& type = "any") |
593 | 202 { |
26059
da2bbcf1fbcd
Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents:
25952
diff
changeset
|
203 if (octave::iskeyword (name)) |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
204 return 0; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
205 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
206 bool search_any = type == "any"; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
207 bool search_var = type == "var"; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
208 bool search_dir = type == "dir"; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
209 bool search_file = type == "file"; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
210 bool search_builtin = type == "builtin"; |
20206
3c8260fd0837
Validate second option to exist () (bug #42618).
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
211 bool search_class = type == "class"; |
3c8260fd0837
Validate second option to exist () (bug #42618).
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
212 |
25951 | 213 if (! (search_any || search_var || search_dir || search_file |
214 || search_builtin || search_class)) | |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
215 error (R"(exist: unrecognized type argument "%s")", type.c_str ()); |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
216 |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
217 octave::symbol_table& symtab = interp.get_symbol_table (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
218 |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
219 if (search_any || search_var) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
220 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
221 octave_value val = interp.varval (name); |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
222 |
23587
0c468af9dc00
maint: Deprecate is_object and replace with isobject.
Rik <rik@octave.org>
parents:
23584
diff
changeset
|
223 if (val.is_constant () || val.isobject () |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
224 || val.is_function_handle () |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
225 || val.is_anonymous_function () |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
226 || val.is_inline_function ()) |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
227 return 1; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
228 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
229 if (search_var) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
230 return 0; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
231 } |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
232 |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
233 // We shouldn't need to look in the global symbol table, since any name |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
234 // that is visible in the current scope will be in the local symbol table. |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
235 |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
236 if (search_any || search_file || search_dir) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
237 { |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
238 bool have_fcn_ext = false; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
239 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
240 std::string xname = name; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
241 std::string ext; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
242 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
243 size_t pos = name.rfind ('.'); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
244 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
245 if (pos != std::string::npos) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
246 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
247 ext = name.substr (pos+1); |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
26843
diff
changeset
|
248 |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
249 if (ext == "m" || ext == "oct" || ext == "mex") |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
250 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
251 xname = name.substr (0, pos); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
252 have_fcn_ext = true; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
253 } |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
254 } |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
255 |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
256 std::string file_name; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
257 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
258 if (search_any || search_file) |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23332
diff
changeset
|
259 { |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
260 octave::load_path& lp = interp.get_load_path (); |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23332
diff
changeset
|
261 |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
262 // Class constructor. |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
263 file_name = lp.find_method (xname, xname); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
264 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
265 if (have_fcn_ext && ! file_name.empty ()) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
266 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
267 pos = file_name.rfind ('.'); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
268 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
269 if (pos != std::string::npos) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
270 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
271 std::string fext = file_name.substr (pos+1); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
272 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
273 if (ext != fext) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
274 file_name = ""; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
275 } |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
276 } |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
277 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
278 if (search_any && file_name.empty ()) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
279 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
280 // Command line function which Matlab does not support |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
281 octave_value val = symtab.find_cmdline_function (xname); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
282 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
283 if (val.is_defined ()) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
284 return 103; |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
285 } |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
286 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
287 // Autoloads can only have simple names without extensions. |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
288 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
289 if (! have_fcn_ext && file_name.empty ()) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
290 { |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
291 octave::tree_evaluator& tw = interp.get_evaluator (); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
292 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
293 file_name = tw.lookup_autoload (name); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
294 } |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
295 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
296 // Use original name here. |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
297 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
298 if (file_name.empty ()) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
299 file_name = lp.find_fcn (name); |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23332
diff
changeset
|
300 } |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
301 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
302 size_t len = file_name.length (); |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
303 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
304 if (len > 0) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
305 { |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
306 if (search_any || search_file) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
307 { |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
308 if (len > 4 && (file_name.substr (len-4) == ".oct" |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
309 || file_name.substr (len-4) == ".mex")) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
310 return 3; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
311 else |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
312 return 2; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
313 } |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
314 } |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
315 |
25646
4d565baa475e
move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25464
diff
changeset
|
316 file_name = octave::file_in_path (name, ""); |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
317 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
318 if (file_name.empty ()) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
319 file_name = name; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
320 |
26843
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26687
diff
changeset
|
321 // "stat" doesn't work on UNC shares and drive letters. |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26687
diff
changeset
|
322 if ((search_any || search_file) && octave::drive_or_unc_share (file_name)) |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26687
diff
changeset
|
323 return 7; |
f07542e3a9b9
Fix "exist" for drive letters and UNC shares on Windows (bug #55824).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26687
diff
changeset
|
324 |
21736
0504351a45e6
use namespace for file_stat classes
John W. Eaton <jwe@octave.org>
parents:
21733
diff
changeset
|
325 octave::sys::file_stat fs (file_name); |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
326 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
327 if (fs) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
328 { |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
329 if (search_any || search_file) |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
330 { |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
331 if (fs.is_dir ()) |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
332 return 7; |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
333 |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
334 len = file_name.length (); |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
335 |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
336 if (len > 4 && (file_name.substr (len-4) == ".oct" |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
337 || file_name.substr (len-4) == ".mex")) |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
338 return 3; |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
339 else |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
340 return 2; |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19750
diff
changeset
|
341 } |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
342 else if (search_dir && fs.is_dir ()) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
343 return 7; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
344 } |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
345 |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
346 if (search_file || search_dir) |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
347 return 0; |
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
348 } |
1277 | 349 |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
350 if ((search_any || search_builtin) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
351 && symtab.is_built_in_function_name (name)) |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
352 return 5; |
4016 | 353 |
17963
2ca3a2f46d93
improve performance of exist when searching for specific items
John W. Eaton <jwe@octave.org>
parents:
17861
diff
changeset
|
354 return 0; |
593 | 355 } |
356 | |
23927
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
357 int |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
358 symbol_exist (const std::string& name, const std::string& type) |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
359 { |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
360 octave::interpreter& interp = octave::__get_interpreter__ ("symbol_exist"); |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
361 |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
362 return symbol_exist (interp, name, type); |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
363 } |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
364 |
e3a36f84d01d
provide variable-editor widget for the GUI
Michael Barnes <mjbcode@runbox.com>
parents:
23829
diff
changeset
|
365 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
366 #define GET_IDX(LEN) \ |
26372
2d9ae06f621b
Fix static analyzer detected V1003 issues with expansions in macros (bug #55347).
Rik <rik@octave.org>
parents:
26169
diff
changeset
|
367 static_cast<int> (((LEN)-1) * static_cast<double> (rand ()) / RAND_MAX) |
4962 | 368 |
4954 | 369 std::string |
370 unique_symbol_name (const std::string& basename) | |
371 { | |
4962 | 372 static const std::string alpha |
373 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; | |
374 | |
375 static size_t len = alpha.length (); | |
376 | |
377 std::string nm = basename + alpha[GET_IDX (len)]; | |
378 | |
379 size_t pos = nm.length (); | |
380 | |
381 if (nm.substr (0, 2) == "__") | |
382 nm.append ("__"); | |
383 | |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
384 octave::interpreter& interp |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
385 = octave::__get_interpreter__ ("unique_symbol_name"); |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
386 |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
387 while (symbol_exist (interp, nm, "any")) |
4962 | 388 nm.insert (pos++, 1, alpha[GET_IDX (len)]); |
389 | |
390 return nm; | |
4954 | 391 } |
392 | |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
393 DEFMETHOD (exist, interp, args, , |
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
394 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
395 @deftypefn {} {@var{c} =} exist (@var{name}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
396 @deftypefnx {} {@var{c} =} exist (@var{name}, @var{type}) |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
397 Check for the existence of @var{name} as a variable, function, file, directory, |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
398 or class. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
399 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
400 The return code @var{c} is one of |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
401 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
402 @table @asis |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
403 @item 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
404 @var{name} is a variable. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
405 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
406 @item 2 |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
407 @var{name} is an absolute filename, an ordinary file in Octave's @code{path}, |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
408 or (after appending @samp{.m}) a function file in Octave's @code{path}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
409 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
410 @item 3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
411 @var{name} is a @samp{.oct} or @samp{.mex} file in Octave's @code{path}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
412 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
413 @item 5 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
414 @var{name} is a built-in function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
415 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
416 @item 7 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
417 @var{name} is a directory. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
418 |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
419 @item 8 |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
420 @var{name} is a class. (Note: not currently implemented) |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
421 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
422 @item 103 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
423 @var{name} is a function not associated with a file (entered on the command |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
424 line). |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
425 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
426 @item 0 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
427 @var{name} does not exist. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
428 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
429 |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
430 If the optional argument @var{type} is supplied, check only for symbols of the |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
431 specified type. Valid types are |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
432 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
433 @table @asis |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
434 @item @qcode{"var"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
435 Check only for variables. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
436 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
437 @item @qcode{"builtin"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
438 Check only for built-in functions. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
439 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
440 @item @qcode{"dir"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
441 Check only for directories. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
442 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
443 @item @qcode{"file"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
444 Check only for files and directories. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
445 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
446 @item @qcode{"class"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
447 Check only for classes. (Note: This option is accepted, but not currently |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
448 implemented) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
449 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
450 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
451 If no type is given, and there are multiple possible matches for name, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
452 @code{exist} will return a code according to the following priority list: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
453 variable, built-in function, oct-file, directory, file, class. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
454 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
455 @code{exist} returns 2 if a regular file called @var{name} is present in |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
456 Octave's search path. For information about other types of files not on the |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
457 search path use some combination of the functions @code{file_in_path} and |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
458 @code{stat} instead. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
459 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
460 Programming Note: If @var{name} is implemented by a buggy .oct/.mex file, |
24485
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
461 calling @var{exist} may cause Octave to crash. To maintain high performance, |
ad04b8055d91
doc: Note that return code 8 (class) is not implemented for exist().
Rik <rik@octave.org>
parents:
24449
diff
changeset
|
462 Octave trusts .oct/.mex files instead of @nospell{sandboxing} them. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
463 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
464 @seealso{file_in_loadpath, file_in_path, dir_in_loadpath, stat} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
465 @end deftypefn */) |
4016 | 466 { |
467 int nargin = args.length (); | |
468 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
469 if (nargin < 1 || nargin > 2) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
470 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
471 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
472 std::string name = args(0).xstring_value ("exist: NAME must be a string"); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
473 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
474 if (nargin == 2) |
4016 | 475 { |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
476 std::string type = args(1).xstring_value ("exist: TYPE must be a string"); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
477 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
478 if (type == "class") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
479 warning (R"(exist: "class" type argument is not implemented)"); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
480 |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
481 return ovl (symbol_exist (interp, name, type)); |
4016 | 482 } |
483 else | |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
484 return ovl (symbol_exist (interp, name)); |
4016 | 485 } |
486 | |
10975
2d14817353a6
allow exist to work correctly for special files; recognize directories when searching for files
John W. Eaton <jwe@octave.org>
parents:
10846
diff
changeset
|
487 /* |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
488 %!shared dirtmp, __var1 |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
489 %! dirtmp = P_tmpdir (); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
490 %! __var1 = 1; |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
491 |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
492 %!assert (exist ("__%Highly_unlikely_name%__"), 0) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
493 %!assert (exist ("__var1"), 1) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
494 %!assert (exist ("__var1", "var"), 1) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
495 %!assert (exist ("__var1", "builtin"), 0) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
496 %!assert (exist ("__var1", "dir"), 0) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
497 %!assert (exist ("__var1", "file"), 0) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
498 |
10975
2d14817353a6
allow exist to work correctly for special files; recognize directories when searching for files
John W. Eaton <jwe@octave.org>
parents:
10846
diff
changeset
|
499 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
500 %! if (isunix ()) |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
501 %! assert (exist ("/bin/sh"), 2); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
502 %! assert (exist ("/bin/sh", "file"), 2); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
503 %! assert (exist ("/bin/sh", "dir"), 0); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
504 %! assert (exist ("/dev/null"), 2); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
505 %! assert (exist ("/dev/null", "file"), 2); |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
506 %! assert (exist ("/dev/null", "dir"), 0); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
507 %! endif |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
508 |
19750
2111917d34c4
fix tests failing after changeset c913247c85a8
John W. Eaton <jwe@octave.org>
parents:
19743
diff
changeset
|
509 %!assert (exist ("print_usage"), 2) |
2111917d34c4
fix tests failing after changeset c913247c85a8
John W. Eaton <jwe@octave.org>
parents:
19743
diff
changeset
|
510 %!assert (exist ("print_usage.m"), 2) |
2111917d34c4
fix tests failing after changeset c913247c85a8
John W. Eaton <jwe@octave.org>
parents:
19743
diff
changeset
|
511 %!assert (exist ("print_usage", "file"), 2) |
2111917d34c4
fix tests failing after changeset c913247c85a8
John W. Eaton <jwe@octave.org>
parents:
19743
diff
changeset
|
512 %!assert (exist ("print_usage", "dir"), 0) |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
513 |
20713
2469d78a1d8b
Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents:
20711
diff
changeset
|
514 ## Don't search path for rooted relative filenames |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
515 %!assert (exist ("plot.m", "file"), 2) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
516 %!assert (exist ("./plot.m", "file"), 0) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
517 %!assert (exist ("./%nonexistentfile%", "file"), 0) |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
518 %!assert (exist ("%nonexistentfile%", "file"), 0) |
20181
aa36fb998a4d
maint: Remove unnecessary whitespace at end of lines.
Rik <rik@octave.org>
parents:
20178
diff
changeset
|
519 |
20713
2469d78a1d8b
Consistently use 'filename' rather than 'file name' throughout code base.
Rik <rik@octave.org>
parents:
20711
diff
changeset
|
520 ## Don't search path for absolute filenames |
19915
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
521 %!test |
26677
33f79d94f21f
Create any BIST temporary files in writable temporary directory (bug #55565).
Rik <rik@octave.org>
parents:
26661
diff
changeset
|
522 %! tname = tempname (); |
19915
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
523 %! unwind_protect |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
524 %! ## open/close file to create it, equivalent of touch |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
525 %! fid = fopen (tname, "w"); |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
526 %! fclose (fid); |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
527 %! [~, fname] = fileparts (tname); |
26679
2b6aa96a5c82
create BIST temporary files in tempdir instead of P_tmpdir (bug #55565)
Mike Miller <mtmiller@octave.org>
parents:
26677
diff
changeset
|
528 %! assert (exist (fullfile (tempdir (), fname), "file"), 2); |
19915
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
529 %! unwind_protect_cleanup |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
530 %! unlink (tname); |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
531 %! end_unwind_protect |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
532 %! assert (exist (fullfile (pwd (), "%nonexistentfile%"), "file"), 0); |
85c5a81c6ddd
Rewrite BIST tests for exist to pass on Windows (bug #44445).
Rik <rik@octave.org>
parents:
19864
diff
changeset
|
533 |
28907
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28888
diff
changeset
|
534 %!assert (exist ("fftw"), 3) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28888
diff
changeset
|
535 %!assert (exist ("fftw.oct"), 3) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28888
diff
changeset
|
536 %!assert (exist ("fftw", "file"), 3) |
11f1207111c5
maint: Don't use semicolon at end of single-line BIST tests.
Rik <rik@octave.org>
parents:
28888
diff
changeset
|
537 %!assert (exist ("fftw", "builtin"), 0) |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
538 |
29032
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
539 %!assert (exist ("ftp"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
540 %!assert (exist ("ftp.m"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
541 %!assert (exist ("@ftp/ftp"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
542 %!assert (exist ("@ftp/ftp.m"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
543 |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
544 %!assert (exist ("inputParser"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
545 %!assert (exist ("inputParser.m"), 2); |
2cbfd91aafb9
improve behavior of exist for finding class constructors (bug #59304)
John W. Eaton <jwe@octave.org>
parents:
28504
diff
changeset
|
546 |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
547 %!assert (exist ("sin"), 5) |
18861
da6ffbf75edf
Simplify exist() code for recognizing command line functions.
Rik <rik@octave.org>
parents:
18858
diff
changeset
|
548 %!assert (exist ("sin", "builtin"), 5) |
da6ffbf75edf
Simplify exist() code for recognizing command line functions.
Rik <rik@octave.org>
parents:
18858
diff
changeset
|
549 %!assert (exist ("sin", "file"), 0) |
18856
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
550 |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
551 %!assert (exist (dirtmp), 7) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
552 %!assert (exist (dirtmp, "dir"), 7) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
553 %!assert (exist (dirtmp, "file"), 7) |
de8c67ba7ac4
Use Matlab return hierarchy for exist() codes when no type is specified.
Rik <rik@octave.org>
parents:
18282
diff
changeset
|
554 |
18880
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
555 %!error exist () |
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
556 %!error exist (1,2,3) |
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
557 %!warning <"class" type argument is not implemented> exist ("a", "class"); |
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
558 %!error <TYPE must be a string> exist ("a", 1) |
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
559 %!error <NAME must be a string> exist (1) |
20206
3c8260fd0837
Validate second option to exist () (bug #42618).
Rik <rik@octave.org>
parents:
20181
diff
changeset
|
560 %!error <unrecognized type argument "foobar"> exist ("a", "foobar") |
18880
ca0d9844dfd7
Fix input validation for exist() which did not error on non-string input.
Rik <rik@octave.org>
parents:
18879
diff
changeset
|
561 |
10975
2d14817353a6
allow exist to work correctly for special files; recognize directories when searching for files
John W. Eaton <jwe@octave.org>
parents:
10846
diff
changeset
|
562 */ |
2d14817353a6
allow exist to work correctly for special files; recognize directories when searching for files
John W. Eaton <jwe@octave.org>
parents:
10846
diff
changeset
|
563 |
593 | 564 // Variable values. |
195 | 565 |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
566 static bool |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
567 wants_local_change (const octave_value_list& args, int& nargin) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
568 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
569 bool retval = false; |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
570 |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
571 if (nargin == 2) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
572 { |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
573 if (! args(1).is_string () || args(1).string_value () != "local") |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
574 error_with_cfn (R"(second argument must be "local")"); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
575 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
576 nargin = 1; |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
577 retval = true; |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
578 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
579 |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
580 return retval; |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
581 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
582 |
23704
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
583 static octave::unwind_protect * |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
584 curr_fcn_unwind_protect_frame (void) |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
585 { |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
586 octave::tree_evaluator& tw |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
587 = octave::__get_evaluator__ ("curr_fcn_unwind_protect_frame"); |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
588 |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
589 return tw.curr_fcn_unwind_protect_frame (); |
23704
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
590 } |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
591 |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
592 template <typename T> |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
593 static bool |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
594 try_local_protect (T& var) |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
595 { |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
596 octave::unwind_protect *frame = curr_fcn_unwind_protect_frame (); |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
597 |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
598 if (frame) |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
599 { |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
600 frame->protect_var (var); |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
601 return true; |
c495549e9a94
refactor local protection for internal variables
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
602 } |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
603 else |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
604 return false; |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
605 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
606 |
5791 | 607 octave_value |
608 set_internal_variable (bool& var, const octave_value_list& args, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
609 int nargout, const char *nm) |
5791 | 610 { |
5794 | 611 octave_value retval; |
612 | |
5800 | 613 int nargin = args.length (); |
614 | |
615 if (nargout > 0 || nargin == 0) | |
5794 | 616 retval = var; |
5791 | 617 |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
618 if (wants_local_change (args, nargin)) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
619 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
620 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
621 warning (R"("local" has no effect outside a function)"); |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
622 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
623 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
624 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
625 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
626 |
5791 | 627 if (nargin == 1) |
628 { | |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
629 bool bval = args(0).xbool_value ("%s: argument must be a logical value", nm); |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
630 |
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
631 var = bval; |
5791 | 632 } |
633 | |
634 return retval; | |
635 } | |
636 | |
637 octave_value | |
5794 | 638 set_internal_variable (char& var, const octave_value_list& args, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
639 int nargout, const char *nm) |
5791 | 640 { |
5794 | 641 octave_value retval; |
642 | |
5800 | 643 int nargin = args.length (); |
644 | |
645 if (nargout > 0 || nargin == 0) | |
5794 | 646 retval = var; |
5791 | 647 |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
648 if (wants_local_change (args, nargin)) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
649 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
650 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
651 warning (R"("local" has no effect outside a function)"); |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
652 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
653 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
654 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
655 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
656 |
5791 | 657 if (nargin == 1) |
658 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20581
diff
changeset
|
659 std::string sval = args(0).xstring_value ("%s: argument must be a single character", nm); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
660 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
661 switch (sval.length ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
662 { |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
663 case 1: |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
664 var = sval[0]; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
665 break; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
666 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
667 case 0: |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
668 var = '\0'; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
669 break; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
670 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
671 default: |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
672 error ("%s: argument must be a single character", nm); |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
673 break; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
674 } |
5794 | 675 } |
676 | |
677 return retval; | |
678 } | |
679 | |
680 octave_value | |
681 set_internal_variable (int& var, const octave_value_list& args, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
682 int nargout, const char *nm, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
683 int minval, int maxval) |
5794 | 684 { |
685 octave_value retval; | |
686 | |
5800 | 687 int nargin = args.length (); |
688 | |
689 if (nargout > 0 || nargin == 0) | |
5794 | 690 retval = var; |
691 | |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
692 if (wants_local_change (args, nargin)) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
693 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
694 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
695 warning (R"("local" has no effect outside a function)"); |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
696 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
697 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
698 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
699 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
700 |
5794 | 701 if (nargin == 1) |
702 { | |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
703 int ival = args(0).xint_value ("%s: argument must be an integer value", nm); |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
704 |
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
705 if (ival < minval) |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
706 error ("%s: arg must be greater than %d", nm, minval); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
707 if (ival > maxval) |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
708 error ("%s: arg must be less than or equal to %d", nm, maxval); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
709 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
710 var = ival; |
5794 | 711 } |
712 | |
713 return retval; | |
714 } | |
715 | |
716 octave_value | |
717 set_internal_variable (double& var, const octave_value_list& args, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
718 int nargout, const char *nm, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
719 double minval, double maxval) |
5794 | 720 { |
721 octave_value retval; | |
722 | |
5800 | 723 int nargin = args.length (); |
724 | |
725 if (nargout > 0 || nargin == 0) | |
5794 | 726 retval = var; |
727 | |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
728 if (wants_local_change (args, nargin)) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
729 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
730 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
731 warning (R"("local" has no effect outside a function)"); |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
732 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
733 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
734 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
735 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
736 |
5794 | 737 if (nargin == 1) |
738 { | |
20711
7b608fadc663
Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents:
20704
diff
changeset
|
739 double dval = args(0).xscalar_value ("%s: argument must be a scalar value", nm); |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
740 |
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
741 if (dval < minval) |
26107
05dfcb24ef12
Supply missing arguments to variable length *printf functions (bug #55046).
Rik <rik@octave.org>
parents:
26089
diff
changeset
|
742 error ("%s: argument must be greater than %g", nm, minval); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
743 if (dval > maxval) |
26107
05dfcb24ef12
Supply missing arguments to variable length *printf functions (bug #55046).
Rik <rik@octave.org>
parents:
26089
diff
changeset
|
744 error ("%s: argument must be less than or equal to %g", nm, maxval); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
745 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
746 var = dval; |
5794 | 747 } |
748 | |
749 return retval; | |
750 } | |
751 | |
752 octave_value | |
753 set_internal_variable (std::string& var, const octave_value_list& args, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
754 int nargout, const char *nm, bool empty_ok) |
5794 | 755 { |
756 octave_value retval; | |
757 | |
5800 | 758 int nargin = args.length (); |
759 | |
760 if (nargout > 0 || nargin == 0) | |
5794 | 761 retval = var; |
762 | |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
763 if (wants_local_change (args, nargin)) |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
764 { |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
765 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
766 warning (R"("local" has no effect outside a function)"); |
10637
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
767 } |
9cd5aa83fa62
implement 'local' parameter to pseudo-variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
768 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
769 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
770 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
771 |
5794 | 772 if (nargin == 1) |
773 { | |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20581
diff
changeset
|
774 std::string sval = args(0).xstring_value ("%s: first argument must be a string", nm); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
775 |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
776 if (! empty_ok && sval.empty ()) |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
777 error ("%s: value must not be empty", nm); |
21224
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
778 |
2e64b5899d1f
maint: invert if/else/error pattern in variables.cc
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
779 var = sval; |
5791 | 780 } |
1 | 781 |
782 return retval; | |
783 } | |
784 | |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
785 octave_value |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
786 set_internal_variable (int& var, const octave_value_list& args, |
10640
5c594472f75e
determine string enum length by trailing null rather than sizeof
Jaroslav Hajek <highegg@gmail.com>
parents:
10638
diff
changeset
|
787 int nargout, const char *nm, const char **choices) |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
788 { |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
789 octave_value retval; |
10640
5c594472f75e
determine string enum length by trailing null rather than sizeof
Jaroslav Hajek <highegg@gmail.com>
parents:
10638
diff
changeset
|
790 int nchoices = 0; |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23704
diff
changeset
|
791 while (choices[nchoices] != nullptr) |
10640
5c594472f75e
determine string enum length by trailing null rather than sizeof
Jaroslav Hajek <highegg@gmail.com>
parents:
10638
diff
changeset
|
792 nchoices++; |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
793 |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
794 int nargin = args.length (); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
795 |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
796 assert (var < nchoices); |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
797 |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
798 if (nargout > 0 || nargin == 0) |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
799 retval = choices[var]; |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
800 |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
801 if (wants_local_change (args, nargin)) |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
802 { |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
803 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
804 warning (R"("local" has no effect outside a function)"); |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
805 } |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
806 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
807 if (nargin > 1) |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
808 print_usage (); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
809 |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
810 if (nargin == 1) |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
811 { |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20581
diff
changeset
|
812 std::string sval = args(0).xstring_value ("%s: first argument must be a string", nm); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
813 |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
814 int i = 0; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
815 for (; i < nchoices; i++) |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
816 { |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
817 if (sval == choices[i]) |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
818 { |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
819 var = i; |
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
820 break; |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
821 } |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
822 } |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
823 if (i == nchoices) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
824 error (R"(%s: value not allowed ("%s"))", nm, sval.c_str ()); |
10638
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
825 } |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
826 |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
827 return retval; |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
828 } |
e1559a8a60b4
general mechanism for string enum variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10637
diff
changeset
|
829 |
21272
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
830 octave_value |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
831 set_internal_variable (std::string& var, const octave_value_list& args, |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
832 int nargout, const char *nm, const char **choices) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
833 { |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
834 octave_value retval; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
835 int nchoices = 0; |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23704
diff
changeset
|
836 while (choices[nchoices] != nullptr) |
21272
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
837 nchoices++; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
838 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
839 int nargin = args.length (); |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
840 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
841 if (nargout > 0 || nargin == 0) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
842 retval = var; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
843 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
844 if (wants_local_change (args, nargin)) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
845 { |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
846 if (! try_local_protect (var)) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
847 warning (R"("local" has no effect outside a function)"); |
21272
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
848 } |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
849 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
850 if (nargin > 1) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
851 print_usage (); |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
852 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
853 if (nargin == 1) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
854 { |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
855 std::string sval = args(0).xstring_value ("%s: first argument must be a string", nm); |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
856 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
857 int i = 0; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
858 for (; i < nchoices; i++) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
859 { |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
860 if (sval == choices[i]) |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
861 { |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
862 var = sval; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
863 break; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
864 } |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
865 } |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
866 if (i == nchoices) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
867 error (R"(%s: value not allowed ("%s"))", nm, sval.c_str ()); |
21272
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
868 } |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
869 |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
870 return retval; |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
871 } |
987c1a79d33f
new set_internal_variable variant
John W. Eaton <jwe@octave.org>
parents:
21224
diff
changeset
|
872 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
873 // NOTE: Calling Fmlock directly (without an associated stack frame) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
874 // will probably not do what you expect because it will lock the calling |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
875 // function. You should use interpreter::mlock directly if you want to |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
876 // lock a .oct function. For .mex, you would normally use mexLock. |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
877 // |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
878 // FIXME: with the current implementation, calling "builtin ('mlock')" |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
879 // will also not do what you expect. Is there any reasonable way to fix |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
880 // that? |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
881 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
882 DEFMETHOD (mlock, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
883 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
884 @deftypefn {} {} mlock () |
26168
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
885 Lock the current function into memory so that it can't be removed with |
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
886 @code{clear}. |
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
887 @seealso{munlock, mislocked, persistent, clear} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
888 @end deftypefn */) |
4319 | 889 { |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
890 if (args.length () != 0) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
891 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
892 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
893 interp.mlock (true); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20925
diff
changeset
|
894 |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
895 return ovl (); |
4319 | 896 } |
897 | |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
898 DEFMETHOD (munlock, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
899 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
900 @deftypefn {} {} munlock () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
901 @deftypefnx {} {} munlock (@var{fcn}) |
26168
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
902 Unlock the named function @var{fcn} so that it may be removed from memory with |
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
903 @code{clear}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
904 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
905 If no function is named then unlock the current function. |
26168
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
906 @seealso{mlock, mislocked, persistent, clear} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
907 @end deftypefn */) |
4319 | 908 { |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
909 int nargin = args.length (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
910 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
911 if (nargin > 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
912 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
913 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
914 if (nargin == 1) |
4319 | 915 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
916 std::string name |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
917 = args(0).xstring_value ("munlock: FCN must be a string"); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
918 |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
919 interp.munlock (name); |
4319 | 920 } |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
921 else |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
922 interp.munlock (true); |
4319 | 923 |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
924 return ovl (); |
4319 | 925 } |
926 | |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
927 DEFMETHOD (mislocked, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
928 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
929 @deftypefn {} {} mislocked () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
930 @deftypefnx {} {} mislocked (@var{fcn}) |
26168
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
931 Return true if the named function @var{fcn} is locked in memory. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
932 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
933 If no function is named then return true if the current function is locked. |
26168
0a3561379dbe
Clarify documentation around locking functions and clear.
Rik <rik@octave.org>
parents:
26167
diff
changeset
|
934 @seealso{mlock, munlock, persistent, clear} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
935 @end deftypefn */) |
4319 | 936 { |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
937 int nargin = args.length (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
938 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
939 if (nargin > 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
940 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
941 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
942 if (nargin == 1) |
4319 | 943 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
944 std::string name |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
945 = args(0).xstring_value ("mislocked: FCN must be a string"); |
20581
fd0efcdb3718
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
946 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
947 return ovl (interp.mislocked (name)); |
4319 | 948 } |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20769
diff
changeset
|
949 else |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27479
diff
changeset
|
950 return ovl (interp.mislocked (true)); |
4319 | 951 } |
952 | |
593 | 953 // Deleting names from the symbol tables. |
954 | |
3681 | 955 static inline bool |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11558
diff
changeset
|
956 name_matches_any_pattern (const std::string& nm, const string_vector& argv, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
957 int argc, int idx, bool have_regexp = false) |
3681 | 958 { |
959 bool retval = false; | |
960 | |
961 for (int k = idx; k < argc; k++) | |
962 { | |
963 std::string patstr = argv[k]; | |
964 if (! patstr.empty ()) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
965 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
966 if (have_regexp) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
967 { |
22333
2758af148ced
move base_list and regexp classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
22327
diff
changeset
|
968 if (octave::regexp::is_match (patstr, nm)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
969 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
970 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
971 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
972 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
973 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
974 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
975 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
976 glob_match pattern (patstr); |
7779
791231dac333
Add regexp matching to Fwho and Fclear
David Bateman <dbateman@free.fr>
parents:
7761
diff
changeset
|
977 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
978 if (pattern.match (nm)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
979 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
980 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
981 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
982 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
983 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
984 } |
3681 | 985 } |
986 | |
987 return retval; | |
988 } | |
989 | |
4009 | 990 static inline void |
991 maybe_warn_exclusive (bool exclusive) | |
992 { | |
993 if (exclusive) | |
994 warning ("clear: ignoring --exclusive option"); | |
995 } | |
996 | |
7336 | 997 static void |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
998 do_clear_functions (octave::interpreter& interp, |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
999 const string_vector& argv, int argc, int idx, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1000 bool exclusive = false) |
4009 | 1001 { |
1002 if (idx == argc) | |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1003 interp.clear_functions (); |
4009 | 1004 else |
1005 { | |
1006 if (exclusive) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1007 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1008 std::list<std::string> fcns = interp.user_function_names (); |
4009 | 1009 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1010 for (const auto& name : fcns) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1011 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1012 if (! name_matches_any_pattern (name, argv, argc, idx)) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1013 interp.clear_function (name); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1014 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1015 } |
4009 | 1016 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1017 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1018 while (idx < argc) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1019 interp.clear_function_pattern (argv[idx++]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1020 } |
4009 | 1021 } |
1022 } | |
1023 | |
7336 | 1024 static void |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1025 do_clear_globals (octave::interpreter& interp, |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1026 const string_vector& argv, int argc, int idx, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1027 bool exclusive = false) |
4009 | 1028 { |
1029 if (idx == argc) | |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7626
diff
changeset
|
1030 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1031 std::list<std::string> gvars = interp.global_variable_names (); |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7626
diff
changeset
|
1032 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1033 for (const auto& name : gvars) |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1034 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1035 interp.clear_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1036 interp.clear_global_variable (name); |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1037 } |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7626
diff
changeset
|
1038 } |
4009 | 1039 else |
1040 { | |
1041 if (exclusive) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1042 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1043 std::list<std::string> gvars = interp.global_variable_names (); |
4009 | 1044 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1045 for (const auto& name : gvars) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1046 { |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1047 if (! name_matches_any_pattern (name, argv, argc, idx)) |
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1048 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1049 interp.clear_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1050 interp.clear_global_variable (name); |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1051 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1052 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1053 } |
4009 | 1054 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1055 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1056 while (idx < argc) |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1057 { |
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1058 std::string pattern = argv[idx++]; |
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1059 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1060 interp.clear_variable_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1061 interp.clear_global_variable_pattern (pattern); |
24352
bff8e3884a88
restructure global variable handling in symbol table
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1062 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1063 } |
4009 | 1064 } |
1065 } | |
1066 | |
7336 | 1067 static void |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1068 do_clear_variables (octave::interpreter& interp, |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1069 const string_vector& argv, int argc, int idx, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1070 bool exclusive = false, bool have_regexp = false) |
4009 | 1071 { |
1072 if (idx == argc) | |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1073 interp.clear_variables (); |
4009 | 1074 else |
1075 { | |
1076 if (exclusive) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1077 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1078 std::list<std::string> lvars = interp.variable_names (); |
4009 | 1079 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1080 for (const auto& name : lvars) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1081 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1082 if (! name_matches_any_pattern (name, argv, argc, idx, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1083 have_regexp)) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1084 interp.clear_variable (name); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1085 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1086 } |
4009 | 1087 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1088 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1089 if (have_regexp) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1090 while (idx < argc) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1091 interp.clear_variable_regexp (argv[idx++]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1092 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1093 while (idx < argc) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1094 interp.clear_variable_pattern (argv[idx++]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1095 } |
4009 | 1096 } |
1097 } | |
1098 | |
7336 | 1099 static void |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1100 do_clear_symbols (octave::interpreter& interp, |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1101 const string_vector& argv, int argc, int idx, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1102 bool exclusive = false) |
4009 | 1103 { |
1104 if (idx == argc) | |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23604
diff
changeset
|
1105 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1106 interp.clear_variables (); |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23604
diff
changeset
|
1107 } |
4009 | 1108 else |
1109 { | |
1110 if (exclusive) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1111 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17756
diff
changeset
|
1112 // FIXME: is this really what we want, or do we |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1113 // somehow want to only clear the functions that are not |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1114 // shadowed by local variables? It seems that would be a |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1115 // bit harder to do. |
4009 | 1116 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1117 do_clear_variables (interp, argv, argc, idx, exclusive); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1118 do_clear_functions (interp, argv, argc, idx, exclusive); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1119 } |
4009 | 1120 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1121 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1122 while (idx < argc) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1123 interp.clear_symbol_pattern (argv[idx++]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1124 } |
4009 | 1125 } |
1126 } | |
1127 | |
1128 static void | |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1129 do_matlab_compatible_clear (octave::interpreter& interp, |
23701
a6e49930ddd2
avoid some global access to interpreter and symbol table
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1130 const string_vector& argv, int argc, int idx) |
4009 | 1131 { |
1132 // This is supposed to be mostly Matlab compatible. | |
1133 | |
1134 for (; idx < argc; idx++) | |
1135 { | |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1136 if (argv[idx] == "all" && ! interp.is_local_variable ("all")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1137 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1138 interp.clear_all (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1139 } |
7336 | 1140 else if (argv[idx] == "functions" |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1141 && ! interp.is_local_variable ("functions")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1142 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1143 do_clear_functions (interp, argv, argc, ++idx); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1144 } |
7336 | 1145 else if (argv[idx] == "global" |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1146 && ! interp.is_local_variable ("global")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1147 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1148 do_clear_globals (interp, argv, argc, ++idx); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1149 } |
7336 | 1150 else if (argv[idx] == "variables" |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1151 && ! interp.is_local_variable ("variables")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1152 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1153 interp.clear_variables (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1154 } |
9240
f27a8c07f0b2
clear -classes and support.
Robert T. Short <octave@phaselockedsystems.com>
parents:
9180
diff
changeset
|
1155 else if (argv[idx] == "classes" |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1156 && ! interp.is_local_variable ("classes")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1157 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1158 interp.clear_objects (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1159 octave_class::clear_exemplar_map (); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1160 interp.clear_all (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1161 } |
4009 | 1162 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1163 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1164 interp.clear_symbol_pattern (argv[idx]); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1165 } |
4009 | 1166 } |
1167 } | |
1168 | |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1169 DEFMETHOD (clear, interp, args, , |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1170 doc: /* -*- texinfo -*- |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1171 @deftypefn {} {} clear |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1172 @deftypefnx {} {} clear @var{pattern} @dots{} |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1173 @deftypefnx {} {} clear @var{options} @var{pattern} @dots{} |
28504
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1174 Delete the names matching the given @var{pattern}s thereby freeing memory. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1175 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1176 The @var{pattern} may contain the following special characters: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1177 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1178 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1179 @item ? |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1180 Match any single character. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1181 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1182 @item * |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1183 Match zero or more characters. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1184 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1185 @item [ @var{list} ] |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1186 Match the list of characters specified by @var{list}. If the first character |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1187 is @code{!} or @code{^}, match all characters except those specified by |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1188 @var{list}. For example, the pattern @code{[a-zA-Z]} will match all lowercase |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1189 and uppercase alphabetic characters. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1190 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1191 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1192 For example, the command |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1193 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1194 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1195 clear foo b*r |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1196 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1197 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1198 @noindent |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1199 clears the name @code{foo} and all names that begin with the letter @samp{b} |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1200 and end with the letter @samp{r}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1201 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1202 If @code{clear} is called without any arguments, all user-defined variables |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1203 are cleared from the current workspace (i.e., local variables). Any global |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1204 variables present will no longer be visible in the current workspace, but they |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1205 will continue to exist in the global workspace. Functions are unaffected by |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1206 this form of @code{clear}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1207 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1208 The following options are available in both long and short form |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1209 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1210 @table @code |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1211 @item all, -all, -a |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1212 Clear all local and global user-defined variables, and all functions from the |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1213 symbol table. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1214 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1215 @item -exclusive, -x |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1216 Clear variables that do @strong{not} match the following pattern. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1217 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1218 @item functions, -functions, -f |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1219 Clear function names from the function symbol table. Persistent variables |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1220 will be re-initialized to their default value unless the function has been |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1221 locked in memory with @code{mlock}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1222 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1223 @item global, -global, -g |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1224 Clear global variable names. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1225 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1226 @item variables, -variables, -v |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1227 Clear local variable names. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1228 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1229 @item classes, -classes, -c |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1230 Clear the class structure table and all objects. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1231 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1232 @item -regexp, -r |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1233 The @var{pattern} arguments are treated as regular expressions and any matches |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1234 will be cleared. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1235 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1236 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1237 With the exception of @option{-exclusive} and @option{-regexp}, all long |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1238 options can be used without the dash as well. Note that, aside from |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1239 @option{-exclusive}, only one other option may appear. All options must |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1240 appear before any patterns. |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1241 |
28504
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1242 Programming Notes: The command @code{clear @var{name}} only clears the variable |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1243 @var{name} when both a variable and a (shadowed) function named @var{name} |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1244 are currently defined. For example, suppose you have defined a function |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1245 @code{foo}, and then hidden it by performing the assignment @code{foo = 2}. |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1246 Executing the command @code{clear foo} once will clear the variable |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1247 definition and restore the definition of @code{foo} as a function. |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1248 Executing @code{clear foo} a second time will clear the function definition. |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1249 |
28504
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1250 When a local variable name, which is linked to a global variable, is cleared |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1251 only the local copy of the variable is removed. The global copy is untouched |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1252 and can be restored with @code{global @var{global_varname}}. Conversely, |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1253 @code{clear -g @var{global_varname}} will remove both the local and global |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1254 variables. |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1255 |
d747d57989e2
doc: Better document how global variables and clear() interact (bug #57604).
Rik <rik@octave.org>
parents:
28024
diff
changeset
|
1256 @seealso{clearvars, who, whos, exist, mlock} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1257 @end deftypefn */) |
529 | 1258 { |
1755 | 1259 int argc = args.length () + 1; |
593 | 1260 |
1968 | 1261 string_vector argv = args.make_argv ("clear"); |
1755 | 1262 |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1263 if (argc == 1) |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1264 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1265 do_clear_variables (interp, argv, argc, true); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1266 |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
1267 octave::event_manager& evmgr = interp.get_event_manager (); |
27261
dccdc3b001a2
eliminate static functions from octave_link class
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
1268 |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
1269 evmgr.clear_workspace (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1270 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1271 else |
529 | 1272 { |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1273 int idx = 0; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1274 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1275 bool clear_all = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1276 bool clear_functions = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1277 bool clear_globals = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1278 bool clear_variables = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1279 bool clear_objects = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1280 bool exclusive = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1281 bool have_regexp = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1282 bool have_dash_option = false; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1283 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1284 while (++idx < argc) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1285 { |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1286 if (argv[idx] == "-all" || argv[idx] == "-a") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1287 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1288 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1289 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1290 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1291 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1292 clear_all = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1293 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1294 else if (argv[idx] == "-exclusive" || argv[idx] == "-x") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1295 { |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1296 exclusive = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1297 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1298 else if (argv[idx] == "-functions" || argv[idx] == "-f") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1299 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1300 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1301 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1302 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1303 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1304 clear_functions = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1305 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1306 else if (argv[idx] == "-global" || argv[idx] == "-g") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1307 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1308 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1309 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1310 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1311 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1312 clear_globals = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1313 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1314 else if (argv[idx] == "-variables" || argv[idx] == "-v") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1315 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1316 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1317 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1318 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1319 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1320 clear_variables = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1321 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1322 else if (argv[idx] == "-classes" || argv[idx] == "-c") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1323 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1324 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1325 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1326 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1327 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1328 clear_objects = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1329 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1330 else if (argv[idx] == "-regexp" || argv[idx] == "-r") |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1331 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1332 if (have_dash_option) |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1333 print_usage (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1334 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1335 have_dash_option = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1336 have_regexp = true; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1337 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1338 else |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1339 break; |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1340 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1341 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1342 if (idx <= argc) |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1343 { |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1344 if (! have_dash_option && ! exclusive) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1345 do_matlab_compatible_clear (interp, argv, argc, idx); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1346 else |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1347 { |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1348 if (clear_all) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1349 { |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1350 maybe_warn_exclusive (exclusive); |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1351 |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1352 if (++idx < argc) |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1353 warning ("clear: ignoring extra arguments after -all"); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1354 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1355 interp.clear_all (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1356 } |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1357 else if (have_regexp) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1358 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1359 do_clear_variables (interp, argv, argc, idx, exclusive, true); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1360 } |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1361 else if (clear_functions) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1362 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1363 do_clear_functions (interp, argv, argc, idx, exclusive); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1364 } |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1365 else if (clear_globals) |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1366 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1367 do_clear_globals (interp, argv, argc, idx, exclusive); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1368 } |
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1369 else if (clear_variables) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1370 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1371 do_clear_variables (interp, argv, argc, idx, exclusive); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1372 } |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1373 else if (clear_objects) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1374 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1375 interp.clear_objects (); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1376 octave_class::clear_exemplar_map (); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1377 interp.clear_all (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1378 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1379 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1380 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1381 do_clear_symbols (interp, argv, argc, idx, exclusive); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1382 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1383 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1384 } |
593 | 1385 } |
1386 | |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
1387 return ovl (); |
529 | 1388 } |
1389 | |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1390 /* |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1391 ## This test must be wrapped in its own function or the 'clear' command will |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1392 ## break the %!test environment. |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1393 %!function __test_clear_no_args__ () |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1394 %! global x |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1395 %! x = 3; |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1396 %! clear |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1397 %! assert (! exist ("x", "var")); # x is not in the current workspace anymore |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1398 %! global x # but still lives in the global workspace |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1399 %! assert (exist ("x", "var")); |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1400 %!endfunction |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1401 |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1402 %!test |
26678
2c246d188151
variables.cc: Don't leak variables into global namespace from BIST tests.
Rik <rik@octave.org>
parents:
26434
diff
changeset
|
1403 %! unwind_protect |
2c246d188151
variables.cc: Don't leak variables into global namespace from BIST tests.
Rik <rik@octave.org>
parents:
26434
diff
changeset
|
1404 %! __test_clear_no_args__ (); |
2c246d188151
variables.cc: Don't leak variables into global namespace from BIST tests.
Rik <rik@octave.org>
parents:
26434
diff
changeset
|
1405 %! unwind_protect_cleanup |
2c246d188151
variables.cc: Don't leak variables into global namespace from BIST tests.
Rik <rik@octave.org>
parents:
26434
diff
changeset
|
1406 %! clear -g x |
2c246d188151
variables.cc: Don't leak variables into global namespace from BIST tests.
Rik <rik@octave.org>
parents:
26434
diff
changeset
|
1407 %! end_unwind_protect |
26169
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1408 |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1409 ## Test that multiple options cannot be given |
096b38cac97f
Improve input validation to reject multiple options for clear (bug #53565).
Rik <rik@octave.org>
parents:
26168
diff
changeset
|
1410 %!error clear -f -g |
26167
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1411 */ |
247126168d23
Don't remove globals when 'clear' called without arguments (bug #39790).
Julien Bect <julien.bect@supelec.fr>
parents:
26113
diff
changeset
|
1412 |
15562
8ed107220a3e
maint: Rename unimplemented.m to __unimplemented__.m.
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15528
diff
changeset
|
1413 static std::string Vmissing_function_hook = "__unimplemented__"; |
10443
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1414 |
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1415 DEFUN (missing_function_hook, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1416 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1417 @deftypefn {} {@var{val} =} missing_function_hook () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1418 @deftypefnx {} {@var{old_val} =} missing_function_hook (@var{new_val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1419 @deftypefnx {} {} missing_function_hook (@var{new_val}, "local") |
27479
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1420 Query or set the internal variable that specifies the function to call |
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1421 to provide extra information when an unknown identifier is referenced. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1422 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1423 When called from inside a function with the @qcode{"local"} option, the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1424 variable is changed locally for the function and any subroutines it calls. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1425 The original variable value is restored when exiting the function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1426 @seealso{missing_component_hook} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1427 @end deftypefn */) |
10443
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1428 { |
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1429 return SET_INTERNAL_VARIABLE (missing_function_hook); |
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1430 } |
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1431 |
27479
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1432 std::string |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1433 maybe_missing_function_hook (const std::string& name) |
10443
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1434 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1435 octave::interpreter& interp |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1436 = octave::__get_interpreter__ ("maybe_missing_function_hook"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1437 |
10444
537d9fbba9c0
don't call missing_function_hook inside try block
Jaroslav Hajek <highegg@gmail.com>
parents:
10443
diff
changeset
|
1438 // Don't do this if we're handling errors. |
27471 | 1439 if (Vmissing_function_hook.empty ()) |
27479
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1440 return ""; |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1441 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1442 octave::symbol_table& symtab = interp.get_symbol_table (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1443 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1444 octave_value val = symtab.find_function (Vmissing_function_hook); |
15528
8d2b3db8b5b0
Allow missing_function_hook to fail silently
Mike Miller <mtmiller@ieee.org>
parents:
15508
diff
changeset
|
1445 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1446 if (val.is_defined ()) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1447 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1448 // Ensure auto-restoration. |
28823
26cfccfee9a0
Replace unwind_protect with more efficient constructs (bug #59192).
Rik <rik@octave.org>
parents:
28749
diff
changeset
|
1449 octave::unwind_protect_var<std::string> |
26cfccfee9a0
Replace unwind_protect with more efficient constructs (bug #59192).
Rik <rik@octave.org>
parents:
28749
diff
changeset
|
1450 restore_var (Vmissing_function_hook); |
15528
8d2b3db8b5b0
Allow missing_function_hook to fail silently
Mike Miller <mtmiller@ieee.org>
parents:
15508
diff
changeset
|
1451 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1452 // Clear the variable prior to calling the function. |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1453 const std::string func_name = Vmissing_function_hook; |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1454 Vmissing_function_hook.clear (); |
15528
8d2b3db8b5b0
Allow missing_function_hook to fail silently
Mike Miller <mtmiller@ieee.org>
parents:
15508
diff
changeset
|
1455 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1456 // Call. |
27479
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1457 octave_value_list tmp = octave::feval (func_name, octave_value (name), 1); |
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1458 |
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1459 if (tmp.length () == 1 && tmp(0).is_string ()) |
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1460 return tmp(0).string_value (); |
10467
13c1f15c67fa
guard against recursive calls of missing_function_hook
Jaroslav Hajek <highegg@gmail.com>
parents:
10444
diff
changeset
|
1461 } |
27479
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1462 |
e8c417f6ef83
make unimplmented message an error and append to undefined identifier error
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1463 return ""; |
10443
34e51d4e199b
implement smart warnings about missing Matlab functionality
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
1464 } |
11558
1e4dfc7a9487
use .argn. to store argument names for inputname function
John W. Eaton <jwe@octave.org>
parents:
11556
diff
changeset
|
1465 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1466 DEFMETHOD (__varval__, interp, args, , |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
1467 doc: /* -*- texinfo -*- |
28749
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1468 @deftypefn {} {@var{value} =} __varval__ (@var{name}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1469 Return the value of the variable @var{name} directly from the symbol table. |
28749
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1470 |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1471 If @var{name} does not exist then nothing is returned, not even an empty matrix |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1472 (@code{[]}), since there would be no way to distinguish between a variable |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1473 not found in the symbol table and a variable who's value was @code{[]}. |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1474 |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1475 A standard usage pattern is to code a @code{try}/@code{catch} block around a |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1476 call to @code{__varval__}. |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1477 |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1478 Example Code |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1479 |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1480 @example |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1481 @group |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1482 try |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1483 @var{val} = __varval__ (@var{name}); |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1484 catch |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1485 ## No variable @var{name} found in symbol table |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1486 @var{val} = NA; # Substitute Not Available (NA) |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1487 error ("@var{name} not found"); # or, throw an error. |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1488 end_try_catch |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1489 @end group |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1490 @end example |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1491 |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1492 Programming Note: The magic @var{name} @qcode{".argn."} will retrieve the text |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1493 of input arguments to a function and is used by @code{inputname} internally. |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1494 @seealso{inputname} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1495 @end deftypefn */) |
11558
1e4dfc7a9487
use .argn. to store argument names for inputname function
John W. Eaton <jwe@octave.org>
parents:
11556
diff
changeset
|
1496 { |
20760
15eefcabcb31
doc: Add docstring for internal function __varval__.
Rik <rik@octave.org>
parents:
20756
diff
changeset
|
1497 if (args.length () != 1) |
11558
1e4dfc7a9487
use .argn. to store argument names for inputname function
John W. Eaton <jwe@octave.org>
parents:
11556
diff
changeset
|
1498 print_usage (); |
1e4dfc7a9487
use .argn. to store argument names for inputname function
John W. Eaton <jwe@octave.org>
parents:
11556
diff
changeset
|
1499 |
28749
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1500 std::string name = args(0).xstring_value ("__varval__: NAME must be a string"); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1501 |
28749
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1502 // We need this kluge to implement inputname in a .m file. |
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1503 if (name == ".argn.") |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1504 { |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1505 octave::tree_evaluator& tw = interp.get_evaluator (); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1506 |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1507 return tw.get_auto_fcn_var (octave::stack_frame::ARG_NAMES); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1508 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26446
diff
changeset
|
1509 |
28749
4e10e25f0fc6
inputname.m: Closer compatibility with Matlab for special values (i,j,NaN,Inf) (bug #59103)
Rik <rik@octave.org>
parents:
28505
diff
changeset
|
1510 return interp.varval (name); |
11558
1e4dfc7a9487
use .argn. to store argument names for inputname function
John W. Eaton <jwe@octave.org>
parents:
11556
diff
changeset
|
1511 } |
17516
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1512 |
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1513 static std::string Vmissing_component_hook; |
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1514 |
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1515 DEFUN (missing_component_hook, args, nargout, |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1516 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1517 @deftypefn {} {@var{val} =} missing_component_hook () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1518 @deftypefnx {} {@var{old_val} =} missing_component_hook (@var{new_val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1519 @deftypefnx {} {} missing_component_hook (@var{new_val}, "local") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1520 Query or set the internal variable that specifies the function to call when |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1521 a component of Octave is missing. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1522 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1523 This can be useful for packagers that may split the Octave installation into |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1524 multiple sub-packages, for example, to provide a hint to users for how to |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1525 install the missing components. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1526 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1527 When called from inside a function with the @qcode{"local"} option, the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1528 variable is changed locally for the function and any subroutines it calls. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1529 The original variable value is restored when exiting the function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1530 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1531 The hook function is expected to be of the form |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1532 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1533 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1534 @var{fcn} (@var{component}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1535 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1536 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1537 Octave will call @var{fcn} with the name of the function that requires the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1538 component and a string describing the missing component. The hook function |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1539 should return an error message to be displayed. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1540 @seealso{missing_function_hook} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1541 @end deftypefn */) |
17516
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1542 { |
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1543 return SET_INTERNAL_VARIABLE (missing_component_hook); |
21656a949661
Add hook function to handle missing Octave components
Mike Miller <mtmiller@ieee.org>
parents:
17355
diff
changeset
|
1544 } |