annotate libinterp/corefcn/variables.cc @ 27919:1891570abac8

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