Mercurial > octave
annotate libinterp/corefcn/error.cc @ 24047:9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
* error.cc (Fwarning): Reorganize documentation to make it clear that output
warnstruct is returned whenever one changes the state of a warning as well
as when the state is simply queried.
Fix size of the output structure depending on input ID.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Wed, 13 Sep 2017 15:24:56 +0200 |
parents | 4b0e0cae49db |
children | bc3819b7cca1 |
rev | line source |
---|---|
1 | 1 /* |
2 | |
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
22808
diff
changeset
|
3 Copyright (C) 1993-2017 John W. Eaton |
1 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
9 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
10 (at your option) any later version. |
1 | 11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
15 GNU General Public License for more details. |
1 | 16 |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
1 | 20 |
21 */ | |
22 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21698
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
1 | 25 #endif |
26 | |
1343 | 27 #include <cstdarg> |
23448
e1c02e7126a9
avoid calling abort if possible; include cstdlib for declaration if needed
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
28 #include <cstdlib> |
1633 | 29 #include <cstring> |
1343 | 30 |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
31 #include <iomanip> |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
32 #include <iostream> |
5765 | 33 #include <sstream> |
1728 | 34 #include <string> |
35 | |
23137
334119c390b3
move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents:
23127
diff
changeset
|
36 #include "bp-table.h" |
23454
30b6eccd6708
use builtin-defun-decls.h to ensure declarations of interpreter functions
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
37 #include "builtin-defun-decls.h" |
22091
0f6fc2ec3b1a
move call_stack class to a separate file
John W. Eaton <jwe@octave.org>
parents:
22089
diff
changeset
|
38 #include "call-stack.h" |
1352 | 39 #include "defun.h" |
1 | 40 #include "error.h" |
3707 | 41 #include "input.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
42 #include "interpreter-private.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
43 #include "interpreter.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
44 #include "oct-map.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
45 #include "octave.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
46 #include "ov-usr-fcn.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
47 #include "ov.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
48 #include "ovl.h" |
1742 | 49 #include "pager.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
50 #include "pt-eval.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
51 #include "unwind-prot.h" |
1352 | 52 #include "utils.h" |
2370 | 53 #include "variables.h" |
1 | 54 |
2174 | 55 // TRUE means that Octave will try to beep obnoxiously before printing |
56 // error messages. | |
5794 | 57 static bool Vbeep_on_error = false; |
2174 | 58 |
3707 | 59 // TRUE means that Octave will try to enter the debugger when an error |
60 // is encountered. This will also inhibit printing of the normal | |
61 // traceback message (you will only see the top-level error message). | |
7353 | 62 bool Vdebug_on_error = false; |
3707 | 63 |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
64 // TRUE means that Octave will try to enter the debugger when an error |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
65 // is encountered within the 'try' section of a 'try' / 'catch' block. |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
66 bool Vdebug_on_caught = false; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
67 |
3707 | 68 // TRUE means that Octave will try to enter the debugger when a warning |
69 // is encountered. | |
7353 | 70 bool Vdebug_on_warning = false; |
3707 | 71 |
5567 | 72 // TRUE means that Octave will try to display a stack trace when a |
73 // warning is encountered. | |
18128
d96747f74b1e
enable "backtrace" warning by default and document option
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
74 static bool Vbacktrace_on_warning = true; |
5567 | 75 |
76 // TRUE means that Octave will print a verbose warning. Currently unused. | |
77 static bool Vverbose_warning; | |
78 | |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
79 // TRUE means that Octave will print no warnings, but lastwarn will be updated |
5582 | 80 static bool Vquiet_warning = false; |
81 | |
5567 | 82 // A structure containing (most of) the current state of warnings. |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
83 static octave_map warning_options; |
5567 | 84 |
3935 | 85 // The text of the last error message. |
86 static std::string Vlast_error_message; | |
87 | |
3934 | 88 // The text of the last warning message. |
89 static std::string Vlast_warning_message; | |
90 | |
5567 | 91 // The last warning message id. |
92 static std::string Vlast_warning_id; | |
3934 | 93 |
5567 | 94 // The last error message id. |
95 static std::string Vlast_error_id; | |
3934 | 96 |
21004
f7e416862e90
doc: fix spelling of "occurred".
Rafael Laboissiere <rafael@laboissiere.net>
parents:
20963
diff
changeset
|
97 // The last file in which an error occurred |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10605
diff
changeset
|
98 static octave_map Vlast_error_stack; |
6361 | 99 |
143 | 100 // Current error state. |
3935 | 101 // |
102 // Valid values: | |
103 // | |
104 // 0: no error | |
105 // 1: an error has occurred | |
106 // | |
672 | 107 int error_state = 0; |
108 | |
1489 | 109 // Tell the error handler whether to print messages, or just store |
110 // them for later. Used for handling errors in eval() and | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
111 // the 'unwind_protect' statement. |
4699 | 112 int buffer_error_messages = 0; |
1489 | 113 |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
114 // The number of layers of try / catch blocks we're in. Used to print |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
115 // "caught error" instead of error when "dbstop if caught error" is on. |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
116 int in_try_catch = 0; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
117 |
3815 | 118 // TRUE means error messages are turned off. |
119 bool discard_error_messages = false; | |
120 | |
4452 | 121 // TRUE means warning messages are turned off. |
122 bool discard_warning_messages = false; | |
123 | |
4318 | 124 void |
125 reset_error_handler (void) | |
126 { | |
4699 | 127 buffer_error_messages = 0; |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
128 in_try_catch = 0; |
4318 | 129 discard_error_messages = false; |
130 } | |
131 | |
5567 | 132 static void |
5794 | 133 initialize_warning_options (const std::string& state) |
5567 | 134 { |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
135 octave_scalar_map initw; |
5567 | 136 |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
137 initw.setfield ("identifier", "all"); |
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
138 initw.setfield ("state", state); |
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
139 |
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
140 warning_options = initw; |
5567 | 141 } |
142 | |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10605
diff
changeset
|
143 static octave_map |
9166
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
144 initialize_last_error_stack (void) |
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
145 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
146 octave::call_stack& cs |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
147 = octave::__get_call_stack__ ("initialize_last_error_stack"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
148 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
149 return cs.empty_backtrace (); |
9166
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
150 } |
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
151 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
152 static void |
4732 | 153 verror (bool save_last_error, std::ostream& os, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
154 const char *name, const char *id, const char *fmt, va_list args, |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
155 bool with_cfn = false) |
1 | 156 { |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
157 if (discard_error_messages && ! Vdebug_on_caught) |
3815 | 158 return; |
159 | |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
160 if (! buffer_error_messages || Vdebug_on_caught) |
23060
baf03cdb28b5
move pager and diary classes into octave namespace
John W. Eaton <jwe@octave.org>
parents:
23052
diff
changeset
|
161 octave::flush_stdout (); |
914 | 162 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
163 // FIXME: we really want to capture the message before it has all the |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
164 // formatting goop attached to it. We probably also want just the |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
165 // message, not the traceback information. |
3935 | 166 |
7877 | 167 std::ostringstream output_buf; |
168 | |
169 octave_vformat (output_buf, fmt, args); | |
170 | |
171 std::string base_msg = output_buf.str (); | |
172 | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
173 bool to_beep_or_not_to_beep_p = Vbeep_on_error; |
7877 | 174 |
175 std::string msg_string; | |
176 | |
177 if (to_beep_or_not_to_beep_p) | |
178 msg_string = "\a"; | |
179 | |
180 if (name) | |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
181 { |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
182 if (in_try_catch && ! strcmp (name, "error")) |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
183 msg_string += "caught error: "; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
184 else |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
185 msg_string += std::string (name) + ": "; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
186 } |
7877 | 187 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
188 octave::call_stack& cs = octave::__get_call_stack__ ("verror"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
189 |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
190 // If with_fcn is specified, we'll attempt to prefix the message with the name |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
191 // of the current executing function. But we'll do so only if: |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
192 // 1. the name is not empty (anonymous function) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
193 // 2. it is not already there (including the following colon) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
194 if (with_cfn) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
195 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
196 octave_function *curfcn = cs.current (); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
197 if (curfcn) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
198 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
199 std::string cfn = curfcn->name (); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
200 if (! cfn.empty ()) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
201 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
202 cfn += ':'; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
203 if (cfn.length () > base_msg.length () |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
204 || base_msg.compare (0, cfn.length (), cfn) != 0) |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
205 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
206 msg_string += cfn + ' '; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
207 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
208 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
209 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
210 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
211 |
23829
01899bdd2a3a
Eliminate unnecessary std::string ("...") constructor calls when "..." suffices.
Rik <rik@octave.org>
parents:
23812
diff
changeset
|
212 msg_string += base_msg + '\n'; |
3935 | 213 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
214 if (save_last_error) |
3935 | 215 { |
216 // This is the first error in a possible series. | |
5567 | 217 |
218 Vlast_error_id = id; | |
7877 | 219 Vlast_error_message = base_msg; |
6361 | 220 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
221 octave_user_code *fcn = cs.caller_user_code (); |
6361 | 222 |
7877 | 223 if (fcn) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
224 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
225 octave_idx_type curr_frame = -1; |
9166
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
226 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
227 Vlast_error_stack = cs.backtrace (0, curr_frame); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
228 } |
9166
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
229 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
230 Vlast_error_stack = initialize_last_error_stack (); |
3935 | 231 } |
232 | |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
233 if (! buffer_error_messages || Vdebug_on_caught) |
1489 | 234 { |
3935 | 235 octave_diary << msg_string; |
4732 | 236 os << msg_string; |
1489 | 237 } |
1 | 238 } |
239 | |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
240 static void |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
241 pr_where_2 (std::ostream& os, const char *fmt, va_list args) |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
242 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
243 if (fmt) |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
244 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
245 if (*fmt) |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
246 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
247 size_t len = strlen (fmt); |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
248 |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
249 if (len > 0) |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
250 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
251 if (fmt[len - 1] == '\n') |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
252 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
253 if (len > 1) |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
254 { |
20827
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
255 std::string tmp_fmt (fmt, len - 1); |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
256 verror (false, os, nullptr, "", tmp_fmt.c_str (), args); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
257 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
258 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
259 else |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
260 verror (false, os, nullptr, "", fmt, args); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
261 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
262 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
263 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
264 else |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
265 panic ("pr_where_2: invalid format"); |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
266 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
267 |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
268 static void |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
269 pr_where_1 (std::ostream& os, const char *fmt, ...) |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
270 { |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
271 va_list args; |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
272 va_start (args, fmt); |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
273 pr_where_2 (os, fmt, args); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
274 va_end (args); |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
275 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
276 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
277 struct |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
278 error_stack_frame |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
279 { |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
280 std::string name; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
281 int line; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
282 int column; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
283 }; |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
284 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
285 static void |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
286 pr_where (std::ostream& os, const char *who, |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
287 const std::list<error_stack_frame>& frames) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
288 { |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
289 size_t nframes = frames.size (); |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
290 |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
291 if (nframes > 0) |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
292 pr_where_1 (os, "%s: called from\n", who); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
293 |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
294 for (const auto& frm : frames) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
295 { |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
296 std::string fcn_name = frm.name; |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
297 int line = frm.line; |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
298 int column = frm.column; |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
299 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
300 if (line > 0) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
301 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
302 if (column > 0) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
303 pr_where_1 (os, " %s at line %d column %d\n", |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
304 fcn_name.c_str (), line, column); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
305 else |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
306 pr_where_1 (os, " %s at line %d\n", fcn_name.c_str (), line); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
307 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
308 else |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
309 pr_where_1 (os, " %s\n", fcn_name.c_str ()); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
310 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
311 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
312 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
313 static void |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
314 pr_where (std::ostream& os, const char *who) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
315 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
316 octave::call_stack& cs = octave::__get_call_stack__ ("pr_where"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
317 |
23052
f97e22a9012a
move octave_call_stack inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22862
diff
changeset
|
318 std::list<octave::call_stack::stack_frame> call_stack_frames |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
319 = cs.backtrace_frames (); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
320 |
20511
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20181
diff
changeset
|
321 // Print the error message only if it is different from the previous one; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20181
diff
changeset
|
322 // Makes the output more concise and readable. |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
323 call_stack_frames.unique (); |
20511
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20181
diff
changeset
|
324 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
325 std::list<error_stack_frame> frames; |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
326 for (const auto& frm : call_stack_frames) |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
327 { |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
328 error_stack_frame frame; |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
329 |
22862
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
330 frame.name = frm.fcn_name (); |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
331 frame.line = frm.line (); |
e365e87371a3
maint: Use C++ range feature to simplify some for loops in libinterp/corefcn.
Rik <rik@octave.org>
parents:
22809
diff
changeset
|
332 frame.column = frm.column (); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
333 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
334 frames.push_back (frame); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
335 } |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
336 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
337 pr_where (os, who, frames); |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
338 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
339 |
23464
7eb0077e86f0
show stack trace for wrong type arg errors (bug #50894)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
340 octave::execution_exception |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
341 make_execution_exception (const char *who) |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
342 { |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
343 std::ostringstream buf; |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
344 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
345 pr_where (buf, who); |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
346 |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
347 octave::execution_exception retval; |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
348 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
349 retval.set_stack_trace (buf.str ()); |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
350 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
351 return retval; |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
352 } |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
353 |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
354 static void |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
355 maybe_enter_debugger (octave::execution_exception& e, |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
356 bool show_stack_trace = false) |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
357 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
358 octave::call_stack& cs = octave::__get_call_stack__ ("maybe_enter_debugger"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
359 |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
360 if ((octave::application::interactive () |
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
361 || octave::application::forced_interactive ()) |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
362 && ((Vdebug_on_error && bp_table::debug_on_err (last_error_id ())) |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
363 || (Vdebug_on_caught && bp_table::debug_on_caught (last_error_id ()))) |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
364 && cs.caller_user_code ()) |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
365 { |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
366 octave::unwind_protect frame; |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
367 frame.protect_var (Vdebug_on_error); |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
368 Vdebug_on_error = false; |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
369 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22121
diff
changeset
|
370 octave::tree_evaluator::debug_mode = true; |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
371 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
372 octave::tree_evaluator::current_frame = cs.current_frame (); |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
373 |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
374 if (show_stack_trace) |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
375 { |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
376 std::string stack_trace = e.info (); |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
377 |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
378 if (! stack_trace.empty ()) |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
379 { |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
380 std::cerr << stack_trace; |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
381 |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
382 e.set_stack_trace (); |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
383 } |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
384 } |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
385 |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
386 do_keyboard (octave_value_list ()); |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
387 } |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
388 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
389 |
3491 | 390 // Warning messages are never buffered. |
391 | |
392 static void | |
5567 | 393 vwarning (const char *name, const char *id, const char *fmt, va_list args) |
3491 | 394 { |
4452 | 395 if (discard_warning_messages) |
396 return; | |
397 | |
23060
baf03cdb28b5
move pager and diary classes into octave namespace
John W. Eaton <jwe@octave.org>
parents:
23052
diff
changeset
|
398 octave::flush_stdout (); |
3491 | 399 |
5765 | 400 std::ostringstream output_buf; |
3491 | 401 |
3761 | 402 octave_vformat (output_buf, fmt, args); |
403 | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
404 // FIXME: we really want to capture the message before it has all the |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
405 // formatting goop attached to it. We probably also want just the |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
406 // message, not the traceback information. |
3935 | 407 |
20140
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
408 std::string base_msg = output_buf.str (); |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
409 std::string msg_string; |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
410 |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
411 if (name) |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
412 msg_string = std::string (name) + ": "; |
20181
aa36fb998a4d
maint: Remove unnecessary whitespace at end of lines.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
413 |
23829
01899bdd2a3a
Eliminate unnecessary std::string ("...") constructor calls when "..." suffices.
Rik <rik@octave.org>
parents:
23812
diff
changeset
|
414 msg_string += base_msg + '\n'; |
3934 | 415 |
19444
3f29b433bd5d
do a better job of preserving warning state when running tests
John W. Eaton <jwe@octave.org>
parents:
19439
diff
changeset
|
416 Vlast_warning_id = id; |
20140
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
417 Vlast_warning_message = base_msg; |
3934 | 418 |
5582 | 419 if (! Vquiet_warning) |
420 { | |
421 octave_diary << msg_string; | |
3935 | 422 |
5582 | 423 std::cerr << msg_string; |
424 } | |
3491 | 425 } |
426 | |
1 | 427 void |
6338 | 428 vmessage (const char *name, const char *fmt, va_list args) |
429 { | |
430 verror (false, std::cerr, name, "", fmt, args); | |
431 } | |
432 | |
433 void | |
1 | 434 message (const char *name, const char *fmt, ...) |
435 { | |
436 va_list args; | |
437 va_start (args, fmt); | |
6338 | 438 vmessage (name, fmt, args); |
1 | 439 va_end (args); |
440 } | |
441 | |
442 void | |
6338 | 443 vmessage_with_id (const char *name, const char *id, const char *fmt, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
444 va_list args) |
6338 | 445 { |
446 verror (false, std::cerr, name, id, fmt, args); | |
447 } | |
448 | |
449 void | |
5567 | 450 message_with_id (const char *name, const char *id, const char *fmt, ...) |
451 { | |
452 va_list args; | |
453 va_start (args, fmt); | |
6338 | 454 vmessage_with_id (name, id, fmt, args); |
5567 | 455 va_end (args); |
456 } | |
457 | |
21040
3e7cfee5f786
maint: Rename attributes GCC_ATTR_XXX to OCTAVE_XXX.
Rik <rik@octave.org>
parents:
21029
diff
changeset
|
458 OCTAVE_NORETURN static |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
459 void |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
460 usage_1 (octave::execution_exception& e, const char *id, |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
461 const char *fmt, va_list args) |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
462 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
463 verror (true, std::cerr, "usage", id, fmt, args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
464 |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
465 maybe_enter_debugger (e); |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
466 |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
467 throw e; |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
468 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
469 |
21040
3e7cfee5f786
maint: Rename attributes GCC_ATTR_XXX to OCTAVE_XXX.
Rik <rik@octave.org>
parents:
21029
diff
changeset
|
470 OCTAVE_NORETURN static |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
471 void |
5567 | 472 usage_1 (const char *id, const char *fmt, va_list args) |
473 { | |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
474 octave::execution_exception e = make_execution_exception ("usage"); |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
475 |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
476 usage_1 (e, id, fmt, args); |
5567 | 477 } |
478 | |
479 void | |
6338 | 480 vusage (const char *fmt, va_list args) |
481 { | |
482 usage_1 ("", fmt, args); | |
483 } | |
484 | |
485 void | |
1 | 486 usage (const char *fmt, ...) |
487 { | |
488 va_list args; | |
489 va_start (args, fmt); | |
21015
b009c65ec062
Stop deprecated warning about use of vusage in usage().
Rik <rik@octave.org>
parents:
21005
diff
changeset
|
490 usage_1 ("", fmt, args); |
5567 | 491 va_end (args); |
492 } | |
493 | |
494 void | |
6338 | 495 vusage_with_id (const char *id, const char *fmt, va_list args) |
496 { | |
497 usage_1 (id, fmt, args); | |
498 } | |
499 | |
500 void | |
5567 | 501 usage_with_id (const char *id, const char *fmt, ...) |
502 { | |
503 va_list args; | |
504 va_start (args, fmt); | |
6338 | 505 vusage_with_id (id, fmt, args); |
1 | 506 va_end (args); |
507 } | |
508 | |
21040
3e7cfee5f786
maint: Rename attributes GCC_ATTR_XXX to OCTAVE_XXX.
Rik <rik@octave.org>
parents:
21029
diff
changeset
|
509 OCTAVE_NORETURN static |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
510 void |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
511 error_1 (octave::execution_exception& e, std::ostream& os, |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
512 const char *name, const char *id, const char *fmt, |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
513 va_list args, bool with_cfn = false) |
6000 | 514 { |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
515 bool show_stack_trace = false; |
20127
a42de4173533
also provide stack traces for errors in script files (bug #44862)
John W. Eaton <jwe@octave.org>
parents:
20101
diff
changeset
|
516 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
517 if (fmt) |
6000 | 518 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
519 if (*fmt) |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
520 { |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
521 size_t len = strlen (fmt); |
6000 | 522 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
523 if (len > 0) |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
524 { |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
525 if (fmt[len - 1] == '\n') |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
526 { |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
527 if (len > 1) |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
528 { |
20827
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
529 std::string tmp_fmt (fmt, len - 1); |
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
530 verror (true, os, name, id, tmp_fmt.c_str (), |
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
531 args, with_cfn); |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
532 } |
20822
40fc94a24a97
if error format ends with newline, suppress stack trace (bug #46608)
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
533 |
40fc94a24a97
if error format ends with newline, suppress stack trace (bug #46608)
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
534 // If format ends with newline, suppress stack trace. |
40fc94a24a97
if error format ends with newline, suppress stack trace (bug #46608)
John W. Eaton <jwe@octave.org>
parents:
20819
diff
changeset
|
535 e.set_stack_trace (); |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
536 } |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
537 else |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
538 { |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
539 verror (true, os, name, id, fmt, args, with_cfn); |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
540 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
541 octave::call_stack& cs |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
542 = octave::__get_call_stack__ ("error_1"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
543 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
544 bool in_user_code = cs.caller_user_code () != nullptr; |
6000 | 545 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
546 if (in_user_code && ! discard_error_messages) |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
547 show_stack_trace = true; |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
548 } |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
549 } |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
550 } |
6000 | 551 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
552 else |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
553 panic ("error_1: invalid format"); |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
554 |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
555 maybe_enter_debugger (e, show_stack_trace); |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
556 |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
557 throw e; |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
558 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
559 |
21040
3e7cfee5f786
maint: Rename attributes GCC_ATTR_XXX to OCTAVE_XXX.
Rik <rik@octave.org>
parents:
21029
diff
changeset
|
560 OCTAVE_NORETURN static |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
561 void |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
562 error_1 (std::ostream& os, const char *name, const char *id, |
21029
e3b3bb522d62
maint: Move GCC_ attributes to start of declaration for future compatibility.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
563 const char *fmt, va_list args, bool with_cfn = false) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
564 { |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
565 octave::execution_exception e = make_execution_exception ("error"); |
20785
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
566 |
b6f2909e7f94
always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents:
20780
diff
changeset
|
567 error_1 (e, os, name, id, fmt, args, with_cfn); |
6000 | 568 } |
569 | |
570 void | |
6338 | 571 verror (const char *fmt, va_list args) |
572 { | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
573 error_1 (std::cerr, "error", "", fmt, args); |
6338 | 574 } |
575 | |
576 void | |
6000 | 577 error (const char *fmt, ...) |
578 { | |
579 va_list args; | |
580 va_start (args, fmt); | |
6338 | 581 verror (fmt, args); |
6000 | 582 va_end (args); |
583 } | |
584 | |
585 void | |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
586 verror (octave::execution_exception& e, const char *fmt, va_list args) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
587 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
588 error_1 (e, std::cerr, "error", "", fmt, args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
589 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
590 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
591 void |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
592 error (octave::execution_exception& e, const char *fmt, ...) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
593 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
594 va_list args; |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
595 va_start (args, fmt); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
596 verror (e, fmt, args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
597 va_end (args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
598 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
599 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
600 void |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
601 verror_with_cfn (const char *fmt, va_list args) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
602 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
603 error_1 (std::cerr, "error", "", fmt, args, true); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
604 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
605 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
606 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
607 error_with_cfn (const char *fmt, ...) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
608 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
609 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
610 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
611 verror_with_cfn (fmt, args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
612 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
613 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
614 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
615 void |
6338 | 616 verror_with_id (const char *id, const char *fmt, va_list args) |
617 { | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
618 error_1 (std::cerr, "error", id, fmt, args); |
6338 | 619 } |
620 | |
621 void | |
6000 | 622 error_with_id (const char *id, const char *fmt, ...) |
623 { | |
624 va_list args; | |
625 va_start (args, fmt); | |
6338 | 626 verror_with_id (id, fmt, args); |
6000 | 627 va_end (args); |
628 } | |
629 | |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
630 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
631 verror_with_id_cfn (const char *id, const char *fmt, va_list args) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
632 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
633 error_1 (std::cerr, "error", id, fmt, args, true); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
634 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
635 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
636 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
637 error_with_id_cfn (const char *id, const char *fmt, ...) |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
638 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
639 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
640 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
641 verror_with_id_cfn (id, fmt, args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
642 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
643 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
644 |
5567 | 645 static int |
646 check_state (const std::string& state) | |
647 { | |
648 // -1: not found | |
649 // 0: found, "off" | |
650 // 1: found, "on" | |
651 // 2: found, "error" | |
652 | |
653 if (state == "off") | |
654 return 0; | |
655 else if (state == "on") | |
656 return 1; | |
657 else if (state == "error") | |
658 return 2; | |
659 else | |
660 return -1; | |
661 } | |
662 | |
663 // For given warning ID, return 0 if warnings are disabled, 1 if | |
14042
57e19c30b7d6
assume "all" "on" if "all" is not present in warning_state structure (bug #35050)
John W. Eaton <jwe@octave.org>
parents:
13987
diff
changeset
|
664 // enabled, and 2 if the given ID should be an error instead of a |
57e19c30b7d6
assume "all" "on" if "all" is not present in warning_state structure (bug #35050)
John W. Eaton <jwe@octave.org>
parents:
13987
diff
changeset
|
665 // warning. |
5567 | 666 |
5781 | 667 int |
5567 | 668 warning_enabled (const std::string& id) |
1 | 669 { |
5567 | 670 int retval = 0; |
671 | |
672 int all_state = -1; | |
673 int id_state = -1; | |
674 | |
675 octave_idx_type nel = warning_options.numel (); | |
676 | |
677 if (nel > 0) | |
678 { | |
679 Cell identifier = warning_options.contents ("identifier"); | |
680 Cell state = warning_options.contents ("state"); | |
681 | |
682 bool all_found = false; | |
683 bool id_found = false; | |
684 | |
685 for (octave_idx_type i = 0; i < nel; i++) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
686 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
687 octave_value ov = identifier(i); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
688 std::string ovs = ov.string_value (); |
5567 | 689 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
690 if (! all_found && ovs == "all") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
691 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
692 all_state = check_state (state(i).string_value ()); |
5567 | 693 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
694 if (all_state >= 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
695 all_found = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
696 } |
5567 | 697 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
698 if (! id_found && ovs == id) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
699 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
700 id_state = check_state (state(i).string_value ()); |
5567 | 701 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
702 if (id_state >= 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
703 id_found = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
704 } |
5567 | 705 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
706 if (all_found && id_found) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
707 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
708 } |
5567 | 709 } |
710 | |
14042
57e19c30b7d6
assume "all" "on" if "all" is not present in warning_state structure (bug #35050)
John W. Eaton <jwe@octave.org>
parents:
13987
diff
changeset
|
711 // If "all" is not present, assume warnings are enabled. |
5567 | 712 if (all_state == -1) |
14042
57e19c30b7d6
assume "all" "on" if "all" is not present in warning_state structure (bug #35050)
John W. Eaton <jwe@octave.org>
parents:
13987
diff
changeset
|
713 all_state = 1; |
5567 | 714 |
715 if (all_state == 0) | |
716 { | |
717 if (id_state >= 0) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
718 retval = id_state; |
5567 | 719 } |
720 else if (all_state == 1) | |
721 { | |
722 if (id_state == 0 || id_state == 2) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
723 retval = id_state; |
5567 | 724 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
725 retval = all_state; |
5567 | 726 } |
727 else if (all_state == 2) | |
7206 | 728 { |
729 if (id_state == 0) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
730 retval= id_state; |
7206 | 731 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
732 retval = all_state; |
7206 | 733 } |
5567 | 734 |
735 return retval; | |
736 } | |
737 | |
738 static void | |
739 warning_1 (const char *id, const char *fmt, va_list args) | |
740 { | |
741 int warn_opt = warning_enabled (id); | |
742 | |
743 if (warn_opt == 2) | |
744 { | |
745 // Handle this warning as an error. | |
746 | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
747 error_1 (std::cerr, "error", id, fmt, args); |
5567 | 748 } |
749 else if (warn_opt == 1) | |
3934 | 750 { |
20140
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
751 bool fmt_suppresses_backtrace = false; |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23448
diff
changeset
|
752 size_t fmt_len = (fmt ? strlen (fmt) : 0); |
20140
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
753 fmt_suppresses_backtrace = (fmt_len > 0 && fmt[fmt_len-1] == '\n'); |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
754 |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
755 if (fmt_suppresses_backtrace && fmt_len > 1) |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
756 { |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
757 // Strip newline before issuing warning |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
758 std::string tmp_fmt (fmt, fmt_len - 1); |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
759 vwarning ("warning", id, tmp_fmt.c_str (), args); |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
760 } |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
761 else |
64a2d4c87ecb
Don't save "warning: " prefix in lastwarn() message.
Rik <rik@octave.org>
parents:
20130
diff
changeset
|
762 vwarning ("warning", id, fmt, args); |
8973 | 763 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
764 octave::call_stack& cs = octave::__get_call_stack__ ("warning_1"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
765 |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
766 bool in_user_code = cs.caller_user_code () != nullptr; |
20127
a42de4173533
also provide stack traces for errors in script files (bug #44862)
John W. Eaton <jwe@octave.org>
parents:
20101
diff
changeset
|
767 |
20130
0aed244dbdb3
don't print stack trace if warning format ends with newline character
John W. Eaton <jwe@octave.org>
parents:
20127
diff
changeset
|
768 if (! fmt_suppresses_backtrace && in_user_code |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
769 && Vbacktrace_on_warning |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
770 && ! discard_warning_messages) |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
771 pr_where (std::cerr, "warning"); |
3935 | 772 |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
773 if ((octave::application::interactive () |
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
774 || octave::application::forced_interactive ()) |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
775 && Vdebug_on_warning && in_user_code && bp_table::debug_on_warn (id)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
776 { |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
777 octave::unwind_protect frame; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
778 frame.protect_var (Vdebug_on_warning); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
779 Vdebug_on_warning = false; |
3707 | 780 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22121
diff
changeset
|
781 octave::tree_evaluator::debug_mode = true; |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
782 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
783 octave::tree_evaluator::current_frame = cs.current_frame (); |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
784 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
785 do_keyboard (octave_value_list ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
786 } |
3707 | 787 } |
1 | 788 } |
789 | |
790 void | |
6338 | 791 vwarning (const char *fmt, va_list args) |
792 { | |
793 warning_1 ("", fmt, args); | |
794 } | |
795 | |
796 void | |
5567 | 797 warning (const char *fmt, ...) |
798 { | |
799 va_list args; | |
800 va_start (args, fmt); | |
6338 | 801 vwarning (fmt, args); |
5567 | 802 va_end (args); |
803 } | |
804 | |
805 void | |
6338 | 806 vwarning_with_id (const char *id, const char *fmt, va_list args) |
807 { | |
808 warning_1 (id, fmt, args); | |
809 } | |
810 | |
811 void | |
5567 | 812 warning_with_id (const char *id, const char *fmt, ...) |
813 { | |
814 va_list args; | |
815 va_start (args, fmt); | |
6338 | 816 vwarning_with_id (id, fmt, args); |
5567 | 817 va_end (args); |
818 } | |
819 | |
820 void | |
6338 | 821 vparse_error (const char *fmt, va_list args) |
822 { | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
823 error_1 (std::cerr, nullptr, "", fmt, args); |
6338 | 824 } |
825 | |
826 void | |
1005 | 827 parse_error (const char *fmt, ...) |
828 { | |
829 va_list args; | |
830 va_start (args, fmt); | |
6338 | 831 vparse_error (fmt, args); |
5567 | 832 va_end (args); |
833 } | |
834 | |
835 void | |
6338 | 836 vparse_error_with_id (const char *id, const char *fmt, va_list args) |
837 { | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
838 error_1 (std::cerr, nullptr, id, fmt, args); |
6338 | 839 } |
840 | |
841 void | |
5567 | 842 parse_error_with_id (const char *id, const char *fmt, ...) |
843 { | |
844 va_list args; | |
845 va_start (args, fmt); | |
6338 | 846 vparse_error_with_id (id, fmt, args); |
1 | 847 va_end (args); |
848 } | |
849 | |
189 | 850 void |
6361 | 851 rethrow_error (const char *id, const char *fmt, ...) |
852 { | |
853 va_list args; | |
854 va_start (args, fmt); | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
855 error_1 (std::cerr, nullptr, id, fmt, args); |
6361 | 856 va_end (args); |
857 } | |
858 | |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
859 static std::list<error_stack_frame> |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
860 make_stack_frame_list (const octave_map& stack) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
861 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
862 std::list<error_stack_frame> frames; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
863 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
864 Cell name = stack.contents ("name"); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
865 Cell line = stack.contents ("line"); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
866 Cell column; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
867 bool have_column = false; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
868 if (stack.contains ("column")) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
869 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
870 have_column = true; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
871 column = stack.contents ("column"); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
872 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
873 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
874 octave_idx_type nel = name.numel (); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
875 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
876 for (octave_idx_type i = 0; i < nel; i++) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
877 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
878 error_stack_frame frame; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
879 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
880 frame.name = name(i).string_value (); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
881 frame.line = line(i).int_value (); |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23448
diff
changeset
|
882 frame.column = (have_column ? column(i).int_value () : -1); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
883 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
884 frames.push_back (frame); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
885 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
886 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
887 return frames; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
888 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
889 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
890 static void |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
891 rethrow_error_1 (const char *id, const char *fmt, ...) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
892 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
893 va_list args; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
894 va_start (args, fmt); |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
895 verror (false, std::cerr, nullptr, id, fmt, args); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
896 va_end (args); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
897 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
898 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
899 OCTAVE_NORETURN static |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
900 void |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
901 rethrow_error (const std::string& id, const std::string& msg, |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
902 const octave_map& stack) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
903 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
904 octave::execution_exception e = make_execution_exception ("error"); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
905 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
906 if (! stack.isempty () |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
907 && ! (stack.contains ("file") && stack.contains ("name") |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
908 && stack.contains ("line"))) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
909 error ("rethrow: STACK struct must contain the fields 'file', 'name', and 'line'"); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
910 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
911 Vlast_error_id = id; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
912 Vlast_error_message = msg; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
913 Vlast_error_stack = stack; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
914 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
915 size_t len = msg.length (); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
916 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
917 std::string tmp_msg (msg); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
918 if (len > 1 && tmp_msg[len-1] == '\n') |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
919 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
920 tmp_msg.erase (len - 1); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
921 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
922 rethrow_error_1 (id.c_str (), "%s\n", tmp_msg.c_str ()); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
923 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
924 else |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
925 rethrow_error_1 (id.c_str (), "%s", tmp_msg.c_str ()); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
926 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
927 if (! stack.isempty ()) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
928 { |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
929 std::ostringstream buf; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
930 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
931 pr_where (buf, "error", make_stack_frame_list (stack)); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
932 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
933 e.set_stack_trace (buf.str ()); |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
934 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
935 |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
936 throw e; |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
937 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
938 |
6361 | 939 void |
1 | 940 panic (const char *fmt, ...) |
941 { | |
942 va_list args; | |
943 va_start (args, fmt); | |
4699 | 944 buffer_error_messages = 0; |
3815 | 945 discard_error_messages = false; |
5567 | 946 verror (false, std::cerr, "panic", "", fmt, args); |
1 | 947 va_end (args); |
948 abort (); | |
949 } | |
950 | |
4732 | 951 static void |
952 defun_usage_message_1 (const char *fmt, ...) | |
953 { | |
954 va_list args; | |
955 va_start (args, fmt); | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
956 error_1 (octave_stdout, nullptr, "", fmt, args); |
4732 | 957 va_end (args); |
958 } | |
959 | |
960 void | |
961 defun_usage_message (const std::string& msg) | |
962 { | |
963 defun_usage_message_1 ("%s", msg.c_str ()); | |
964 } | |
965 | |
5567 | 966 typedef void (*error_fun)(const char *, const char *, ...); |
1489 | 967 |
2086 | 968 extern octave_value_list Fsprintf (const octave_value_list&, int); |
1489 | 969 |
3934 | 970 static std::string |
5567 | 971 handle_message (error_fun f, const char *id, const char *msg, |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
972 const octave_value_list& args, bool have_fmt) |
528 | 973 { |
3934 | 974 std::string retval; |
528 | 975 |
3523 | 976 std::string tstr; |
1728 | 977 |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20817
diff
changeset
|
978 if (args.length () > 0) |
528 | 979 { |
3066 | 980 octave_value arg; |
981 | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
982 if (have_fmt) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
983 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
984 octave_value_list tmp = Fsprintf (args, 1); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
985 arg = tmp(0); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
986 } |
3066 | 987 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
988 arg = args(0); |
2745 | 989 |
990 if (arg.is_defined ()) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
991 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
992 if (arg.is_string ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
993 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
994 tstr = arg.string_value (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
995 msg = tstr.c_str (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
996 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
997 if (! msg) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
998 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
999 } |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1000 else if (arg.isempty ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1001 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1002 } |
528 | 1003 } |
1004 | |
1489 | 1005 // Ugh. |
1006 | |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1007 size_t len = strlen (msg); |
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1008 |
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1009 if (len > 0) |
1489 | 1010 { |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1011 if (msg[len - 1] == '\n') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1012 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1013 if (len > 1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1014 { |
20827
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
1015 std::string tmp_msg (msg, len - 1); |
b3f985199f3f
eliminate memory leaks in error functions
John W. Eaton <jwe@octave.org>
parents:
20826
diff
changeset
|
1016 f (id, "%s\n", tmp_msg.c_str ()); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1017 retval = tmp_msg; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1018 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1019 } |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1020 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1021 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1022 f (id, "%s", msg); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1023 retval = msg; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1024 } |
3934 | 1025 } |
528 | 1026 |
1027 return retval; | |
1028 } | |
1029 | |
6361 | 1030 DEFUN (rethrow, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1031 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
|
1032 @deftypefn {} {} rethrow (@var{err}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1033 Reissue a previous error as defined by @var{err}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1034 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1035 @var{err} is a structure that must contain at least the @qcode{"message"} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1036 and @qcode{"identifier"} fields. @var{err} can also contain a field |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1037 @qcode{"stack"} that gives information on the assumed location of the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1038 error. Typically @var{err} is returned from @code{lasterror}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1039 @seealso{lasterror, lasterr, error} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1040 @end deftypefn */) |
6361 | 1041 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20817
diff
changeset
|
1042 if (args.length () != 1) |
6959 | 1043 print_usage (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1044 |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1045 const octave_scalar_map err = args(0).scalar_map_value (); |
6361 | 1046 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1047 if (! (err.contains ("message") && err.contains ("identifier"))) |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1048 error ("rethrow: ERR struct must contain the fields 'message' and 'identifier'"); |
9166
69088b7b139c
use complete stack trace information for lasterror
John W. Eaton <jwe@octave.org>
parents:
9153
diff
changeset
|
1049 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1050 std::string msg = err.contents ("message").string_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1051 std::string id = err.contents ("identifier").string_value (); |
6483 | 1052 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1053 octave_map err_stack = initialize_last_error_stack (); |
6483 | 1054 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1055 if (err.contains ("stack")) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1056 err_stack = err.contents ("stack").xmap_value ("ERR.STACK must be a struct"); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1057 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1058 rethrow_error (id, msg, err_stack); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1059 |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
1060 return ovl (); |
6361 | 1061 } |
1062 | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1063 // Determine whether the first argument to error or warning function |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1064 // should be handled as the message identifier or as the format string. |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1065 |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1066 static bool |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1067 maybe_extract_message_id (const std::string& caller, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1068 const octave_value_list& args, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1069 octave_value_list& nargs, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1070 std::string& id) |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1071 { |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1072 nargs = args; |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
21015
diff
changeset
|
1073 id = ""; |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1074 |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1075 int nargin = args.length (); |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1076 |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1077 bool have_fmt = nargin > 1; |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1078 |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1079 if (nargin > 0) |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1080 { |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1081 std::string arg1 = args(0).string_value (); |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1082 |
23812
057a894914df
Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1083 // For compatibility with Matlab, an identifier must contain ':', |
057a894914df
Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1084 // but not at the beginning or the end, and it must not contain '%' |
057a894914df
Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1085 // (even if it is not a valid conversion operator) or whitespace. |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1086 |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1087 if (arg1.find_first_of ("% \f\n\r\t\v") == std::string::npos |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1088 && arg1.find (':') != std::string::npos |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1089 && arg1[0] != ':' |
23812
057a894914df
Use C++11 string fcns back() and pop_back() to simplify code.
Rik <rik@octave.org>
parents:
23795
diff
changeset
|
1090 && arg1.back () != ':') |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1091 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1092 if (nargin > 1) |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1093 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1094 id = arg1; |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1095 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1096 nargs.resize (nargin-1); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1097 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1098 for (int i = 1; i < nargin; i++) |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1099 nargs(i-1) = args(i); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1100 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1101 else |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1102 nargs(0) = "call to " + caller |
22407
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22327
diff
changeset
|
1103 + " with message identifier '" + arg1 |
34ce5be04942
maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents:
22327
diff
changeset
|
1104 + "' requires message"; |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1105 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1106 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1107 |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1108 return have_fmt; |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1109 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1110 |
1957 | 1111 DEFUN (error, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1112 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
|
1113 @deftypefn {} {} error (@var{template}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1114 @deftypefnx {} {} error (@var{id}, @var{template}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1115 Display an error message and stop m-file execution. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1116 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1117 Format the optional arguments under the control of the template string |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1118 @var{template} using the same rules as the @code{printf} family of |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1119 functions (@pxref{Formatted Output}) and print the resulting message |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1120 on the @code{stderr} stream. The message is prefixed by the character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1121 string @samp{error: }. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1122 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1123 Calling @code{error} also sets Octave's internal error state such that |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1124 control will return to the top level without evaluating any further |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1125 commands. This is useful for aborting from functions or scripts. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1126 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1127 If the error message does not end with a newline character, Octave will |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1128 print a traceback of all the function calls leading to the error. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1129 example, given the following function definitions: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1130 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1131 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1132 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1133 function f () g (); end |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1134 function g () h (); end |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1135 function h () nargin == 1 || error ("nargin != 1"); end |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1136 @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
|
1137 @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
|
1138 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1139 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1140 calling the function @code{f} will result in a list of messages that |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1141 can help you to quickly find the exact location of the error: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1142 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1143 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1144 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1145 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1146 error: nargin != 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1147 error: called from: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1148 error: h at line 1, column 27 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1149 error: g at line 1, column 15 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1150 error: f at line 1, column 15 |
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 group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1152 @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
|
1153 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1154 If the error message ends in a newline character, Octave will print the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1155 message but will not display any traceback messages as it returns |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1156 control to the top level. For example, modifying the error message |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1157 in the previous example to end in a newline causes Octave to only print |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1158 a single message: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1159 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1160 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1161 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1162 function h () nargin == 1 || error ("nargin != 1\n"); end |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1163 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1164 error: nargin != 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1165 @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
|
1166 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1167 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1168 A null string ("") input to @code{error} will be ignored and the code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1169 will continue running as if the statement were a NOP@. This is for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1170 compatibility with @sc{matlab}. It also makes it possible to write code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1171 such as |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1172 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1173 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1174 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1175 err_msg = ""; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1176 if (CONDITION 1) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1177 err_msg = "CONDITION 1 found"; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1178 elseif (CONDITION2) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1179 err_msg = "CONDITION 2 found"; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1180 @dots{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1181 endif |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1182 error (err_msg); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1183 @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
|
1184 @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
|
1185 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1186 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1187 which will only stop execution if an error has been found. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1188 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1189 Implementation Note: For compatibility with @sc{matlab}, escape |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1190 sequences in @var{template} (e.g., @qcode{"@xbackslashchar{}n"} => |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1191 newline) are processed regardless of whether @var{template} has been defined |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1192 with single quotes, as long as there are two or more input arguments. To |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1193 disable escape sequence expansion use a second backslash before the sequence |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1194 (e.g., @qcode{"@xbackslashchar{}@xbackslashchar{}n"}) or use the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1195 @code{regexptranslate} function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1196 @seealso{warning, lasterror} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1197 @end deftypefn */) |
897 | 1198 { |
7252 | 1199 |
1200 int nargin = args.length (); | |
1201 | |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1202 if (nargin == 0) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1203 print_usage (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1204 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1205 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1206 |
7252 | 1207 octave_value_list nargs = args; |
1208 | |
1209 std::string id; | |
1210 | |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1211 bool have_fmt = false; |
5567 | 1212 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1213 if (nargin == 1 && args(0).isstruct ()) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1214 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1215 // empty struct is not an error. return and resume calling function. |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1216 if (args(0).isempty ()) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1217 return retval; |
13709
a0875c6cab7e
error.cc: Don't complain if error struct input is empty (Matlab compatability)
Rik <octave@nomad.inbox5.com>
parents:
12705
diff
changeset
|
1218 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1219 octave_scalar_map m = args(0).scalar_map_value (); |
7252 | 1220 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1221 // empty struct is not an error. return and resume calling function. |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1222 if (m.nfields () == 0) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1223 return retval; |
7252 | 1224 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1225 if (m.contains ("message")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1226 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1227 octave_value c = m.getfield ("message"); |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1228 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1229 if (c.is_string ()) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1230 nargs(0) = c.string_value (); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1231 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1232 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1233 if (m.contains ("identifier")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1234 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1235 octave_value c = m.getfield ("identifier"); |
7252 | 1236 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1237 if (c.is_string ()) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1238 id = c.string_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1239 } |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1240 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1241 // FIXME: also need to handle "stack" field in error structure, |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1242 // but that will require some more significant surgery on |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1243 // handle_message, error_with_id, etc. |
7252 | 1244 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1245 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1246 have_fmt = maybe_extract_message_id ("error", args, nargs, id); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1247 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1248 handle_message (error_with_id, id.c_str (), "unspecified error", |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1249 nargs, have_fmt); |
7252 | 1250 |
3934 | 1251 return retval; |
1489 | 1252 } |
897 | 1253 |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1254 static octave_scalar_map |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1255 warning_query (const std::string& id_arg) |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1256 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1257 octave_scalar_map retval; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1258 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1259 std::string id = id_arg; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1260 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1261 if (id == "last") |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1262 id = Vlast_warning_id; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1263 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1264 Cell ident = warning_options.contents ("identifier"); |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1265 Cell state = warning_options.contents ("state"); |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1266 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1267 octave_idx_type nel = ident.numel (); |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1268 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1269 assert (nel != 0); |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1270 |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1271 bool found = false; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1272 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1273 std::string val; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1274 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1275 for (octave_idx_type i = 0; i < nel; i++) |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1276 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1277 if (ident(i).string_value () == id) |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1278 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1279 val = state(i).string_value (); |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1280 found = true; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1281 break; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1282 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1283 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1284 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1285 if (! found) |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1286 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1287 for (octave_idx_type i = 0; i < nel; i++) |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1288 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1289 if (ident(i).string_value () == "all") |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1290 { |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1291 val = state(i).string_value (); |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1292 found = true; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1293 break; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1294 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1295 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1296 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1297 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1298 // The warning state "all" is always supposed to remain in the list, |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1299 // so we should always find a state, either explicitly or by using the |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1300 // state for "all". |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1301 |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1302 assert (found); |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1303 |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1304 retval.assign ("identifier", id); |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1305 retval.assign ("state", val); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1306 |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1307 return retval; |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1308 } |
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1309 |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1310 static std::string |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1311 default_warning_state (void) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1312 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1313 std::string retval = "on"; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1314 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1315 Cell ident = warning_options.contents ("identifier"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1316 Cell state = warning_options.contents ("state"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1317 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1318 octave_idx_type nel = ident.numel (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1319 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1320 for (octave_idx_type i = 0; i < nel; i++) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1321 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1322 if (ident(i).string_value () == "all") |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1323 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1324 retval = state(i).string_value (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1325 break; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1326 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1327 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1328 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1329 return retval; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1330 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1331 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1332 static void |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1333 display_warning_options (std::ostream& os) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1334 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1335 Cell ident = warning_options.contents ("identifier"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1336 Cell state = warning_options.contents ("state"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1337 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1338 octave_idx_type nel = ident.numel (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1339 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1340 std::string all_state = default_warning_state (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1341 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1342 if (all_state == "on") |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1343 os << "By default, warnings are enabled."; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1344 else if (all_state == "off") |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1345 os << "By default, warnings are disabled."; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1346 else if (all_state == "error") |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1347 os << "By default, warnings are treated as errors."; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1348 else |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1349 panic_impossible (); |
19597
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19444
diff
changeset
|
1350 |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1351 if (nel > 1) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1352 os << "\n\n"; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1353 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1354 // The state for all is always supposed to be first in the list. |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1355 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1356 for (octave_idx_type i = 1; i < nel; i++) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1357 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1358 std::string tid = ident(i).string_value (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1359 std::string tst = state(i).string_value (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1360 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1361 os << std::setw (7) << tst << " " << tid << "\n"; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1362 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1363 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1364 os << std::endl; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1365 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1366 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1367 static void |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1368 set_warning_option (const std::string& state, const std::string& ident) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1369 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1370 std::string all_state = default_warning_state (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1371 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1372 if (state != "on" && state != "off" && state != "error") |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1373 error ("invalid warning state: %s", state.c_str ()); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1374 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1375 Cell tid = warning_options.contents ("identifier"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1376 Cell tst = warning_options.contents ("state"); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1377 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1378 octave_idx_type nel = tid.numel (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1379 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1380 for (octave_idx_type i = 0; i < nel; i++) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1381 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1382 if (tid(i).string_value () == ident) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1383 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1384 // We found it in the current list of options. If the state |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1385 // for "all" is same as arg1, we can simply remove the item |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1386 // from the list. |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1387 |
22121
879f297f3194
Retain at least "all" in warning list (bug #47543)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22094
diff
changeset
|
1388 if (state == all_state && ident != "all") |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1389 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1390 for (i = i + 1; i < nel; i++) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1391 { |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1392 tid(i-1) = tid(i); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1393 tst(i-1) = tst(i); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1394 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1395 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1396 tid.resize (dim_vector (1, nel-1)); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1397 tst.resize (dim_vector (1, nel-1)); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1398 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1399 else |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1400 tst(i) = state; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1401 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1402 warning_options.clear (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1403 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1404 warning_options.assign ("identifier", tid); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1405 warning_options.assign ("state", tst); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1406 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1407 return; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1408 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1409 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1410 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1411 // The option wasn't already in the list. Append it. |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1412 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1413 tid.resize (dim_vector (1, nel+1)); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1414 tst.resize (dim_vector (1, nel+1)); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1415 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1416 tid(nel) = ident; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1417 tst(nel) = state; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1418 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1419 warning_options.clear (); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1420 |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1421 warning_options.assign ("identifier", tid); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1422 warning_options.assign ("state", tst); |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1423 } |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1424 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1425 DEFMETHOD (warning, interp, args, nargout, |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1426 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1427 @deftypefn {} {} warning (@var{template}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1428 @deftypefnx {} {} warning (@var{id}, @var{template}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1429 @deftypefnx {} {} warning ("on", @var{id}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1430 @deftypefnx {} {} warning ("off", @var{id}) |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1431 @deftypefnx {} {} warning ("error", @var{id}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1432 @deftypefnx {} {} warning ("query", @var{id}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1433 @deftypefnx {} {} warning (@var{state}, @var{id}, "local") |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1434 @deftypefnx {} {} warning (@var{stin}) |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1435 @deftypefnx {} {@var{stout} =} warning (@dots{}) |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1436 @deftypefnx {} {@var{mode_st} =} warning (@var{state}, @var{mode}) |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1437 @deftypefnx {} {} warning (@var{mode_st}) |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1438 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1439 Display a warning message or control the behavior of Octave's warning |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1440 system. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1441 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1442 The first call form uses a template @var{template} and optional |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1443 additional arguments to display a message on the @code{stderr} stream. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1444 The message is formatted using the same rules as the @code{printf} family |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1445 of functions (@pxref{Formatted Output}) and prefixed by the character |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1446 string @samp{warning: }. You should use this function when you want to |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1447 notify the user of an unusual condition, but only when it makes sense for |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1448 your program to go on. For example: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1449 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1450 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1451 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1452 warning ("foo: maybe something wrong here"); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1453 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1454 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1455 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1456 The optional warning identifier @var{id} allows users to enable or disable |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1457 warnings tagged by this identifier. A message identifier is a string of the |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1458 form @qcode{"NAMESPACE:WARNING-NAME"}. Octave's own warnings use the |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1459 @qcode{"Octave"} namespace (@pxref{XREFwarning_ids}). For example: |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1460 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1461 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1462 @group |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1463 warning ("MyNameSpace:check-something", |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1464 "foo: maybe something wrong here"); |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1465 @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
|
1466 @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
|
1467 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1468 The second call form is meant to change and/or query the state of warnings. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1469 The first input argument must be a string @var{state} (@qcode{"on"}, |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1470 @qcode{"off"}, @qcode{"error"}, or @qcode{"query"}) followed by an optional |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1471 warning identifier @var{id} or @qcode{"all"} (default). |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1472 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1473 The optional output argument @var{stout} is a structure or structure array |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1474 with fields @qcode{"state"} and @qcode{"identifier"}. The @var{state} argument |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1475 may have the following values: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1476 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1477 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1478 @item @qcode{"on"}|@qcode{"off"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1479 Enable or disable the display of warnings identified by @var{id} and optionally |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1480 return their previous state @var{stout}. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1481 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1482 @item @qcode{"error"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1483 Turn warnings identified by @var{id} into errors and optionally return their |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1484 previous state @var{stout}. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1485 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1486 @item @qcode{"query"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1487 Return the current state of warnings identified by @var{id}. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1488 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1489 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1490 A structure or structure array @var{stin}, with fields @qcode{"state"} and |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1491 @qcode{"identifier"}, may be passed to achieve equivalent results. The |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1492 following example shows how to temporarily disable a warning and then restore |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1493 its original state: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1494 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1495 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1496 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1497 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1498 ## Disable the previous warning and save its original state |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1499 [~, id] = lastwarn (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1500 warnstate = warning ("off", id); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1501 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1502 ## Restore its original state |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1503 warning (warnstate); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1504 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1505 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1506 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1507 If a final argument @qcode{"local"} is provided then the warning state will be |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1508 set temporarily until the end of the current function. Changes to warning |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1509 states that are set locally affect the current function and all functions |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1510 called from the current scope. The previous warning state is restored on |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1511 return from the current function. The @qcode{"local"} option is ignored if |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1512 used in the top-level workspace. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1513 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1514 With no input argument @code{warning ()} is equivalent to |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1515 @code{warning ("query", "all")} except that in the absence of an output |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1516 argument, the state of warnings is displayed on @code{stderr}. |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1517 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1518 The level of verbosity of the warning system may also be controlled by two |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1519 modes @var{mode}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1520 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1521 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1522 @item @qcode{"backtrace"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1523 enable/disable the display of the stack trace after the warning message |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1524 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1525 @item @qcode{"verbose"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1526 enable/disable the display of additional information after the warning message |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1527 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1528 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1529 In this case the @var{state} argument may only be @qcode{"on"} or |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1530 @qcode{"off"}. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1531 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1532 Implementation Note: For compatibility with @sc{matlab}, escape |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1533 sequences in @var{template} (e.g., @qcode{"@xbackslashchar{}n"} => |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1534 newline) are processed regardless of whether @var{template} has been defined |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1535 with single quotes, as long as there are two or more input arguments. To |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1536 disable escape sequence expansion use a second backslash before the sequence |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1537 (e.g., @qcode{"@xbackslashchar{}@xbackslashchar{}n"}) or use the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1538 @code{regexptranslate} function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1539 @seealso{warning_ids, lastwarn, error} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1540 @end deftypefn */) |
1489 | 1541 { |
5567 | 1542 octave_value retval; |
3934 | 1543 |
5567 | 1544 int nargin = args.length (); |
3935 | 1545 bool done = false; |
3934 | 1546 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1547 if (nargin > 0 && args.all_strings_p ()) |
3935 | 1548 { |
1549 string_vector argv = args.make_argv ("warning"); | |
1550 | |
20996 | 1551 std::string arg1 = argv[1]; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1552 std::string arg2 = "all"; |
5567 | 1553 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1554 if (nargin >= 2) |
20996 | 1555 arg2 = argv[2]; |
5567 | 1556 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1557 if (arg1 == "on" || arg1 == "off" || arg1 == "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1558 { |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1559 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1560 octave_map old_warning_options; |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1561 if (arg2 == "all") |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1562 old_warning_options = warning_options; |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1563 else |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1564 old_warning_options = octave_map (warning_query (arg2)); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1565 |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
1566 octave::symbol_table& symtab = interp.get_symbol_table (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23584
diff
changeset
|
1567 |
20996 | 1568 if (nargin == 3 && argv[3] == "local" |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23584
diff
changeset
|
1569 && ! symtab.at_top_level ()) |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1570 { |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
1571 octave::symbol_table::scope *scope |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23604
diff
changeset
|
1572 = symtab.require_current_scope ("warning"); |
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23604
diff
changeset
|
1573 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1574 octave_scalar_map val = warning_query (arg2); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1575 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1576 octave_value curr_state = val.contents ("state"); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1577 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1578 // FIXME: this might be better with a dictionary object. |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1579 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1580 octave_value curr_warning_states |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23604
diff
changeset
|
1581 = scope->varval (".saved_warning_states."); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1582 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1583 octave_map m; |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1584 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1585 if (curr_warning_states.is_defined ()) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1586 m = curr_warning_states.map_value (); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1587 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1588 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1589 string_vector fields (2); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1590 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1591 fields(0) = "identifier"; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1592 fields(1) = "state"; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1593 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1594 m = octave_map (dim_vector (0, 1), fields); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1595 } |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1596 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1597 Cell ids = m.contents ("identifier"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1598 Cell states = m.contents ("state"); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1599 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1600 octave_idx_type nel = states.numel (); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1601 bool found = false; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1602 octave_idx_type i; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1603 for (i = 0; i < nel; i++) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1604 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1605 std::string id = ids(i).string_value (); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1606 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1607 if (id == arg2) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1608 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1609 states(i) = curr_state; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1610 found = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1611 break; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1612 } |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1613 } |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1614 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1615 if (! found) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1616 { |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1617 m.resize (dim_vector (nel+1, 1)); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1618 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1619 ids.resize (dim_vector (nel+1, 1)); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1620 states.resize (dim_vector (nel+1, 1)); |
3934 | 1621 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1622 ids(nel) = arg2; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1623 states(nel) = curr_state; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1624 } |
7202 | 1625 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1626 m.contents ("identifier") = ids; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1627 m.contents ("state") = states; |
7202 | 1628 |
23850
4b0e0cae49db
disallow dynamic variable creation in static scopes (bug #51698)
John W. Eaton <jwe@octave.org>
parents:
23829
diff
changeset
|
1629 scope->force_assign (".saved_warning_states.", m); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1630 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1631 // Now ignore the "local" argument and continue to |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1632 // handle the current setting. |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1633 nargin--; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1634 } |
7202 | 1635 |
21000 | 1636 if (nargin >= 2 && arg2 == "all") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1637 { |
21000 | 1638 // If "all" is explicitly given as ID. |
7202 | 1639 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1640 octave_map tmp; |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1641 int is_error = (arg1 == "error"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1642 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1643 Cell id (1, 1 + 2*is_error); |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1644 Cell st (1, 1 + 2*is_error); |
7206 | 1645 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1646 id(0) = arg2; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1647 st(0) = arg1; |
7206 | 1648 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1649 // Since internal Octave functions are not compatible, |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1650 // and "all"=="error" causes any "on" to throw an error, |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1651 // turning all warnings into errors should disable |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1652 // Octave:language-extension. |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1653 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1654 if (is_error) |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1655 { |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1656 id(1) = "Octave:language-extension"; |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1657 st(1) = "off"; |
7202 | 1658 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1659 id(2) = "Octave:single-quote-string"; |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1660 st(2) = "off"; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1661 } |
5567 | 1662 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1663 tmp.assign ("identifier", id); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1664 tmp.assign ("state", st); |
5582 | 1665 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1666 warning_options = tmp; |
5567 | 1667 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1668 done = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1669 } |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1670 else if (arg2 == "backtrace") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1671 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1672 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1673 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1674 Vbacktrace_on_warning = (arg1 == "on"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1675 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1676 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1677 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1678 else if (arg2 == "debug") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1679 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1680 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1681 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1682 Vdebug_on_warning = (arg1 == "on"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1683 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1684 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1685 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1686 else if (arg2 == "verbose") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1687 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1688 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1689 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1690 Vverbose_warning = (arg1 == "on"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1691 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1692 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1693 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1694 else if (arg2 == "quiet") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1695 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1696 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1697 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1698 Vquiet_warning = (arg1 == "on"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1699 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1700 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1701 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1702 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1703 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1704 if (arg2 == "last") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1705 arg2 = Vlast_warning_id; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1706 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1707 set_warning_option (arg1, arg2); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1708 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1709 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1710 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1711 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1712 if (done && nargout > 0) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1713 retval = old_warning_options; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1714 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1715 else if (arg1 == "query") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1716 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1717 if (arg2 == "all") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1718 retval = warning_options; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1719 else if (arg2 == "backtrace" || arg2 == "debug" |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1720 || arg2 == "verbose" || arg2 == "quiet") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1721 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1722 octave_scalar_map tmp; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1723 tmp.assign ("identifier", arg2); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1724 if (arg2 == "backtrace") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1725 tmp.assign ("state", Vbacktrace_on_warning ? "on" : "off"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1726 else if (arg2 == "debug") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1727 tmp.assign ("state", Vdebug_on_warning ? "on" : "off"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1728 else if (arg2 == "verbose") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1729 tmp.assign ("state", Vverbose_warning ? "on" : "off"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1730 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1731 tmp.assign ("state", Vquiet_warning ? "on" : "off"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1732 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1733 retval = tmp; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1734 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1735 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1736 retval = warning_query (arg2); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1737 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1738 done = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1739 } |
3934 | 1740 } |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1741 else if (nargin == 0) |
5567 | 1742 { |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1743 if (nargout > 0) |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1744 retval = warning_options; |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1745 else |
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1746 display_warning_options (octave_stdout); |
3934 | 1747 |
5567 | 1748 done = true; |
1749 } | |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1750 else if (nargin == 1) |
5567 | 1751 { |
1752 octave_value arg = args(0); | |
1753 | |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1754 octave_map old_warning_options; |
5567 | 1755 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1756 if (arg.isstruct ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1757 { |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
1758 octave_map m = arg.map_value (); |
5567 | 1759 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1760 if (! m.contains ("identifier") || ! m.contains ("state")) |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1761 error ("warning: STATE structure must have fields 'identifier' and 'state'"); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1762 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1763 // Simply step through the struct elements one at a time. |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1764 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1765 Cell ident = m.contents ("identifier"); |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1766 Cell state = m.contents ("state"); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1767 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1768 octave_idx_type nel = ident.numel (); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1769 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1770 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1771 old_warning_options = octave_map (m); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1772 Cell oldstate (state); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1773 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1774 for (octave_idx_type i = 0; i < nel; i++) |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1775 { |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1776 std::string tid = ident(i).string_value (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1777 oldstate(i) = warning_query (tid).getfield ("state"); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1778 } |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1779 old_warning_options.setfield ("state", oldstate); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1780 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1781 // Set new values |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1782 for (octave_idx_type i = 0; i < nel; i++) |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1783 { |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1784 std::string tst = state(i).string_value (); |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1785 std::string tid = ident(i).string_value (); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1786 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1787 set_warning_option (tst, tid); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1788 } |
5567 | 1789 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1790 done = true; |
5567 | 1791 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1792 if (nargout > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1793 retval = old_warning_options; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1794 } |
5567 | 1795 } |
1796 | |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1797 if (! done) |
3935 | 1798 { |
5567 | 1799 octave_value_list nargs = args; |
1800 | |
1801 std::string id; | |
1802 | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1803 bool have_fmt = maybe_extract_message_id ("warning", args, nargs, id); |
5567 | 1804 |
3935 | 1805 std::string prev_msg = Vlast_warning_message; |
1806 | |
5567 | 1807 std::string curr_msg = handle_message (warning_with_id, id.c_str (), |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1808 "unspecified warning", nargs, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1809 have_fmt); |
3935 | 1810 |
1811 if (nargout > 0) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1812 retval = prev_msg; |
3935 | 1813 } |
1814 | |
3934 | 1815 return retval; |
1816 } | |
1817 | |
20963
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1818 /* |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
1819 %!test <*45753> |
20963
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1820 %! warning ("error"); |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1821 %! assert (! isempty (help ("warning"))); |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1822 */ |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1823 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1824 /* |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1825 %!test <*51997> |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1826 %! id = "Octave:divide-by-zero"; |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1827 %! current = warning ("query", id); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1828 %! current_all = warning (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1829 %! previous = warning (current_all); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1830 %! assert (previous, current_all); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1831 %! previous = warning (current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1832 %! assert (previous, current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1833 %! previous = warning (current.state, id); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1834 %! assert (previous, current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1835 */ |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1836 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1837 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1838 set_warning_state (const std::string& id, const std::string& state) |
5794 | 1839 { |
1840 octave_value_list args; | |
1841 | |
1842 args(1) = id; | |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1843 args(0) = state; |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1844 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1845 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1846 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1847 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1848 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1849 } |
5794 | 1850 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1851 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1852 set_warning_state (const octave_value_list& args) |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1853 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1854 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1855 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1856 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1857 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1858 } |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1859 |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1860 void |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1861 disable_warning (const std::string& id) |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1862 { |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1863 set_warning_option ("off", id); |
5794 | 1864 } |
1865 | |
1866 void | |
1867 initialize_default_warning_state (void) | |
1868 { | |
1869 initialize_warning_options ("on"); | |
1870 | |
1871 // Most people will want to have the following disabled. | |
1872 | |
21990
efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21966
diff
changeset
|
1873 disable_warning ("Octave:array-as-logical"); |
5794 | 1874 disable_warning ("Octave:array-to-scalar"); |
1875 disable_warning ("Octave:array-to-vector"); | |
1876 disable_warning ("Octave:imag-to-real"); | |
19852
e9a0bd0b125c
Rename 'matlab-incompatible' warning to 'language-extension'.
Carnë Draug <carandraug@octave.org>
parents:
19849
diff
changeset
|
1877 disable_warning ("Octave:language-extension"); |
5794 | 1878 disable_warning ("Octave:missing-semicolon"); |
1879 disable_warning ("Octave:neg-dim-as-zero"); | |
1880 disable_warning ("Octave:resize-on-range-error"); | |
1881 disable_warning ("Octave:separator-insert"); | |
1882 disable_warning ("Octave:single-quote-string"); | |
1883 disable_warning ("Octave:str-to-num"); | |
13841
0a158dbdb04a
Remove 3 unused warning ids
Rik <octave@nomad.inbox5.com>
parents:
13709
diff
changeset
|
1884 disable_warning ("Octave:mixed-string-concat"); |
5794 | 1885 disable_warning ("Octave:variable-switch-label"); |
1886 } | |
1887 | |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1888 DEFMETHOD (lasterror, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1889 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
|
1890 @deftypefn {} {@var{lasterr} =} lasterror () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1891 @deftypefnx {} {} lasterror (@var{err}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1892 @deftypefnx {} {} lasterror ("reset") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1893 Query or set the last error message structure. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1894 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1895 When called without arguments, return a structure containing the last error |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1896 message and other information related to this error. The elements of the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1897 structure are: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1898 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1899 @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
|
1900 @item message |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1901 The text of the last error message |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1902 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1903 @item identifier |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1904 The message identifier of this error message |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1905 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1906 @item stack |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1907 A structure containing information on where the message occurred. This may |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1908 be an empty structure if the information cannot be obtained. The fields of |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1909 the structure are: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1910 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1911 @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
|
1912 @item file |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1913 The name of the file where the error occurred |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1914 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1915 @item name |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1916 The name of function in which the error occurred |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1917 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1918 @item line |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1919 The line number at which the error occurred |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1920 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1921 @item column |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1922 An optional field with the column number at which the error occurred |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1923 @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
|
1924 @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
|
1925 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1926 The last error structure may be set by passing a scalar structure, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1927 @var{err}, as input. Any fields of @var{err} that match those above are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1928 set while any unspecified fields are initialized with default values. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1929 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1930 If @code{lasterror} is called with the argument @qcode{"reset"}, all |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1931 fields are set to their default values. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1932 @seealso{lasterr, error, lastwarn} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1933 @end deftypefn */) |
6361 | 1934 { |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14559
diff
changeset
|
1935 int nargin = args.length (); |
6361 | 1936 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1937 if (nargin > 1) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1938 print_usage (); |
6361 | 1939 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1940 octave_scalar_map err; |
6361 | 1941 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1942 err.assign ("message", Vlast_error_message); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1943 err.assign ("identifier", Vlast_error_id); |
7976
736124a4fa3d
lasterr, lasterror: unwind-protect error_state
John W. Eaton <jwe@octave.org>
parents:
7882
diff
changeset
|
1944 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1945 err.assign ("stack", octave_value (Vlast_error_stack)); |
7976
736124a4fa3d
lasterr, lasterror: unwind-protect error_state
John W. Eaton <jwe@octave.org>
parents:
7882
diff
changeset
|
1946 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1947 if (nargin == 1) |
6361 | 1948 { |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1949 if (args(0).is_string ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1950 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
1951 if (args(0).string_value () != "reset") |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
1952 error ("lasterror: unrecognized string argument"); |
6361 | 1953 |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
21015
diff
changeset
|
1954 Vlast_error_message = ""; |
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
21015
diff
changeset
|
1955 Vlast_error_id = ""; |
6361 | 1956 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
1957 Vlast_error_stack = initialize_last_error_stack (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1958 } |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1959 else if (args(0).isstruct ()) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1960 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1961 octave_scalar_map new_err = args(0).scalar_map_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1962 octave_scalar_map new_err_stack; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1963 std::string new_error_message; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1964 std::string new_error_id; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1965 std::string new_error_file; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1966 std::string new_error_name; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1967 int new_error_line = -1; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1968 int new_error_column = -1; |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1969 bool initialize_stack = false; |
6361 | 1970 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1971 if (new_err.contains ("message")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1972 { |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1973 const std::string tmp = |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1974 new_err.getfield ("message").string_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1975 new_error_message = tmp; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1976 } |
6361 | 1977 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1978 if (new_err.contains ("identifier")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1979 { |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1980 const std::string tmp = |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1981 new_err.getfield ("identifier").string_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1982 new_error_id = tmp; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1983 } |
6361 | 1984 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1985 if (new_err.contains ("stack")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1986 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1987 if (new_err.getfield ("stack").isempty ()) |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1988 initialize_stack = true; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1989 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1990 { |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1991 new_err_stack = |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1992 new_err.getfield ("stack").scalar_map_value (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1993 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1994 if (new_err_stack.contains ("file")) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1995 { |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1996 const std::string tmp = |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1997 new_err_stack.getfield ("file").string_value (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1998 new_error_file = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1999 } |
6361 | 2000 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2001 if (new_err_stack.contains ("name")) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2002 { |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2003 const std::string tmp = |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2004 new_err_stack.getfield ("name").string_value (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2005 new_error_name = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2006 } |
6361 | 2007 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2008 if (new_err_stack.contains ("line")) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2009 { |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2010 const int tmp = |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2011 new_err_stack.getfield ("line").nint_value (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2012 new_error_line = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2013 } |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2014 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2015 if (new_err_stack.contains ("column")) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2016 { |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2017 const int tmp = |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2018 new_err_stack.getfield ("column").nint_value (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2019 new_error_column = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2020 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2021 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2022 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2023 |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2024 Vlast_error_message = new_error_message; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2025 Vlast_error_id = new_error_id; |
6361 | 2026 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2027 if (initialize_stack) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2028 Vlast_error_stack = initialize_last_error_stack (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2029 else if (new_err.contains ("stack")) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2030 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2031 new_err_stack.setfield ("file", new_error_file); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2032 new_err_stack.setfield ("name", new_error_name); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2033 new_err_stack.setfield ("line", new_error_line); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2034 new_err_stack.setfield ("column", new_error_column); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2035 Vlast_error_stack = new_err_stack; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2036 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2037 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2038 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2039 // No stack field. Fill it in with backtrace info. |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2040 octave_idx_type curr_frame = -1; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2041 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2042 octave::call_stack& cs = interp.get_call_stack (); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2043 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2044 Vlast_error_stack = cs.backtrace (0, curr_frame); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2045 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2046 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2047 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2048 error ("lasterror: argument must be a structure or a string"); |
6361 | 2049 } |
2050 | |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21121
diff
changeset
|
2051 return ovl (err); |
6361 | 2052 } |
2053 | |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2054 /* |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2055 ## Test lasterror with empty error state |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2056 %!test |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2057 %! lasterror ("reset"); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2058 %! x = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2059 %! assert (x.identifier, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2060 %! assert (x.message, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2061 %! assert (isempty (x.stack)) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2062 %! lasterror (x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2063 %! y = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2064 %! assert (y, x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2065 */ |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2066 |
5567 | 2067 DEFUN (lasterr, 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
|
2068 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
|
2069 @deftypefn {} {[@var{msg}, @var{msgid}] =} lasterr () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2070 @deftypefnx {} {} lasterr (@var{msg}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2071 @deftypefnx {} {} lasterr (@var{msg}, @var{msgid}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2072 Query or set the last error message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2073 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2074 When called without input arguments, return the last error message and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2075 message identifier. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2076 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2077 With one argument, set the last error message to @var{msg}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2078 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2079 With two arguments, also set the last message identifier. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2080 @seealso{lasterror, error, lastwarn} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2081 @end deftypefn */) |
3935 | 2082 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2083 int nargin = args.length (); |
3935 | 2084 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2085 if (nargin > 2) |
5823 | 2086 print_usage (); |
3935 | 2087 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2088 string_vector argv = args.make_argv ("lasterr"); |
5567 | 2089 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2090 std::string prev_error_id = Vlast_error_id; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2091 std::string prev_error_message = Vlast_error_message; |
5567 | 2092 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2093 if (nargin == 2) |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2094 { |
20996 | 2095 Vlast_error_id = argv[2]; |
2096 Vlast_error_message = argv[1]; | |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2097 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2098 else if (nargin == 1) |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2099 { |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2100 Vlast_error_id = ""; |
20996 | 2101 Vlast_error_message = argv[1]; |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2102 } |
5567 | 2103 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2104 if (nargin == 0 || nargout > 0) |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2105 return ovl (prev_error_message, prev_error_id); |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2106 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2107 return ovl (); |
3935 | 2108 } |
2109 | |
5567 | 2110 DEFUN (lastwarn, 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
|
2111 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
|
2112 @deftypefn {} {[@var{msg}, @var{msgid}] =} lastwarn () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2113 @deftypefnx {} {} lastwarn (@var{msg}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2114 @deftypefnx {} {} lastwarn (@var{msg}, @var{msgid}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2115 Query or set the last warning message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2116 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2117 When called without input arguments, return the last warning message and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2118 message identifier. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2119 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2120 With one argument, set the last warning message to @var{msg}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2121 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2122 With two arguments, also set the last message identifier. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2123 @seealso{warning, lasterror, lasterr} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2124 @end deftypefn */) |
3934 | 2125 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2126 int nargin = args.length (); |
5567 | 2127 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2128 if (nargin > 2) |
5823 | 2129 print_usage (); |
3934 | 2130 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2131 string_vector argv = args.make_argv ("lastwarn"); |
5567 | 2132 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2133 std::string prev_warning_id = Vlast_warning_id; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2134 std::string prev_warning_message = Vlast_warning_message; |
3934 | 2135 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2136 if (nargin == 2) |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2137 { |
20996 | 2138 Vlast_warning_id = argv[2]; |
2139 Vlast_warning_message = argv[1]; | |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2140 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2141 else if (nargin == 1) |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2142 { |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2143 Vlast_warning_id = ""; |
20996 | 2144 Vlast_warning_message = argv[1]; |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2145 } |
5567 | 2146 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2147 if (nargin == 0 || nargout > 0) |
20828
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2148 return ovl (prev_warning_message, prev_warning_id); |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2149 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2150 return ovl (); |
897 | 2151 } |
2152 | |
20946 | 2153 // FIXME: Deprecated in 4.0 and scheduled for removal in 4.4. |
2154 | |
19111 | 2155 DEFUN (__usage__, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2156 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
|
2157 @deftypefn {} {} usage (@var{msg}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2158 Print the message @var{msg}, prefixed by the string @samp{usage: }, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2159 set Octave's internal error state such that control will return to the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2160 top level without evaluating any more commands. This is useful for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2161 aborting from functions. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2162 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2163 After @code{usage} is evaluated, Octave will print a traceback of all |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2164 the function calls leading to the usage message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2165 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2166 You should use this function for reporting problems errors that result |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2167 from an improper call to a function, such as calling a function with an |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2168 incorrect number of arguments, or with arguments of the wrong type. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2169 example, most functions distributed with Octave begin with code like |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2170 this |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2171 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2172 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2173 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2174 if (nargin != 2) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2175 usage ("foo (a, b)"); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2176 endif |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2177 @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
|
2178 @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
|
2179 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2180 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2181 to check for the proper number of arguments. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2182 @end deftypefn */) |
899 | 2183 { |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
2184 handle_message (usage_with_id, "", "unknown", args, true); |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
2185 return ovl (); |
899 | 2186 } |
2187 | |
5794 | 2188 DEFUN (beep_on_error, 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
|
2189 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
|
2190 @deftypefn {} {@var{val} =} beep_on_error () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2191 @deftypefnx {} {@var{old_val} =} beep_on_error (@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
|
2192 @deftypefnx {} {} beep_on_error (@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
|
2193 Query or set the internal variable that controls whether Octave will try |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2194 to ring the terminal bell before printing an error message. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2195 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2196 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
|
2197 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
|
2198 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
|
2199 @end deftypefn */) |
3707 | 2200 { |
5794 | 2201 return SET_INTERNAL_VARIABLE (beep_on_error); |
3707 | 2202 } |
2203 | |
5794 | 2204 DEFUN (debug_on_error, 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
|
2205 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
|
2206 @deftypefn {} {@var{val} =} debug_on_error () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2207 @deftypefnx {} {@var{old_val} =} debug_on_error (@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
|
2208 @deftypefnx {} {} debug_on_error (@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
|
2209 Query or set the internal variable that controls whether Octave will try |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2210 to enter the debugger when an error is encountered. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2211 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2212 This will also inhibit printing of the normal traceback message (you will |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2213 only see the top-level error message). |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2214 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2215 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
|
2216 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
|
2217 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
|
2218 @seealso{debug_on_warning, debug_on_interrupt} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2219 @end deftypefn */) |
5794 | 2220 { |
2221 return SET_INTERNAL_VARIABLE (debug_on_error); | |
2222 } | |
3707 | 2223 |
5794 | 2224 DEFUN (debug_on_warning, 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
|
2225 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
|
2226 @deftypefn {} {@var{val} =} debug_on_warning () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2227 @deftypefnx {} {@var{old_val} =} debug_on_warning (@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
|
2228 @deftypefnx {} {} debug_on_warning (@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
|
2229 Query or set the internal variable that controls whether Octave will try |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2230 to enter the debugger when a warning is encountered. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2231 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2232 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
|
2233 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
|
2234 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
|
2235 @seealso{debug_on_error, debug_on_interrupt} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2236 @end deftypefn */) |
5794 | 2237 { |
2238 return SET_INTERNAL_VARIABLE (debug_on_warning); | |
2174 | 2239 } |
2240 | |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2241 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2242 last_error_message (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2243 { |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2244 return Vlast_error_message; |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2245 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2246 |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2247 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2248 last_error_id (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2249 { |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2250 return Vlast_error_id; |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2251 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2252 |
18222
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2253 octave_map |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2254 last_error_stack (void) |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2255 { |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2256 return Vlast_error_stack; |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2257 } |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2258 |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2259 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2260 last_warning_message (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2261 { |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2262 return Vlast_warning_message; |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2263 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2264 |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2265 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2266 last_warning_id (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2267 { |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2268 return Vlast_warning_id; |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2269 } |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2270 |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2271 void |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
2272 interpreter_try (octave::unwind_protect& frame) |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2273 { |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2274 frame.protect_var (buffer_error_messages); |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2275 frame.protect_var (Vdebug_on_error); |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2276 frame.protect_var (Vdebug_on_warning); |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2277 |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2278 buffer_error_messages++; |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2279 Vdebug_on_error = false; |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2280 Vdebug_on_warning = false; |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21127
diff
changeset
|
2281 // leave Vdebug_on_caught as it was, so errors in try/catch are still caught |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2282 } |