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