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