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