Mercurial > octave
annotate libinterp/corefcn/error.cc @ 29951:381082ed261d
delete some unused functions in error.cc
* (last_error_message, last_error_id, last_error_stack,
last_warning_message, last_warning_id): Delete. These functions have
not been declared in error.h for several releases.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 14 Aug 2021 08:43:55 -0400 |
parents | 32f4357ac8d9 |
children | a956ca6698d2 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
28980
diff
changeset
|
3 // Copyright (C) 1993-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
1 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21698
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
1 | 28 #endif |
29 | |
1343 | 30 #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
|
31 #include <cstdlib> |
1633 | 32 #include <cstring> |
1343 | 33 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
34 #include <algorithm> |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
35 #include <iomanip> |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
36 #include <iostream> |
5765 | 37 #include <sstream> |
1728 | 38 #include <string> |
39 | |
27471 | 40 #include "quit.h" |
41 | |
23137
334119c390b3
move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents:
23127
diff
changeset
|
42 #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
|
43 #include "builtin-defun-decls.h" |
1352 | 44 #include "defun.h" |
1 | 45 #include "error.h" |
29502
76fdbe78884f
allow event manager to handle display of execution exceptions
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
46 #include "event-manager.h" |
3707 | 47 #include "input.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
48 #include "interpreter-private.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
49 #include "interpreter.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
50 #include "oct-map.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
51 #include "octave.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
52 #include "ov-usr-fcn.h" |
2370 | 53 #include "ov.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
54 #include "ovl.h" |
1742 | 55 #include "pager.h" |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
56 #include "pt-eval.h" |
3707 | 57 #include "unwind-prot.h" |
1352 | 58 #include "utils.h" |
2370 | 59 #include "variables.h" |
1 | 60 |
27471 | 61 static std::string |
62 format_message (const char *fmt, va_list args) | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
63 { |
27471 | 64 if (! fmt) |
65 return ""; | |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
66 |
27471 | 67 std::ostringstream output_buf; |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
68 |
27471 | 69 octave::vformat (output_buf, fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
70 |
27471 | 71 return output_buf.str (); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
72 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
73 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
74 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
75 static void |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
76 error_1 (octave::execution_exception& ee, const char *id, const char *fmt, |
27471 | 77 va_list args) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
78 { |
27471 | 79 octave::error_system& es = octave::__get_error_system__ ("error_1"); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
80 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
81 es.error_1 (ee, id, fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
82 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
83 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
84 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
85 static void |
27471 | 86 error_1 (const char *id, const char *fmt, va_list args) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
87 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
88 octave::error_system& es = octave::__get_error_system__ ("error_1"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
89 |
27471 | 90 es.error_1 (id, fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
91 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
92 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
93 static int |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
94 check_state (const std::string& state) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
95 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
96 // -1: not found |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
97 // 0: found, "off" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
98 // 1: found, "on" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
99 // 2: found, "error" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
100 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
101 if (state == "off") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
102 return 0; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
103 else if (state == "on") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
104 return 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
105 else if (state == "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
106 return 2; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
107 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
108 return -1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
109 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
110 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
111 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
112 vwarning (const char *id, const char *fmt, va_list args) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
113 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
114 octave::error_system& es = octave::__get_error_system__ ("warning"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
115 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
116 es.vwarning (id, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
117 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
118 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
119 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
120 defun_usage_message (const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
121 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
122 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
123 va_start (args, fmt); |
27471 | 124 error_1 ("", fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
125 va_end (args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
126 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
127 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
128 typedef void (*error_fun)(const char *, const char *, ...); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
129 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
130 static std::string |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
131 handle_message (error_fun f, const char *id, const char *msg, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
132 const octave_value_list& args, bool have_fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
133 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
134 std::string retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
135 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
136 std::string tmpstr; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
137 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
138 if (args.length () > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
139 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
140 octave_value arg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
141 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
142 if (have_fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
143 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
144 octave_value_list tmp = Fsprintf (args, 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
145 arg = tmp(0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
146 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
147 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
148 arg = args(0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
149 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
150 if (arg.is_defined ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
151 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
152 if (arg.isempty ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
153 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
154 else if (arg.is_string ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
155 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
156 tmpstr = arg.string_value (); // 2-stage assignment required |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
157 msg = tmpstr.c_str (); // in order to generate pointer |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
158 // to valid memory. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
159 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
160 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
161 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
162 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
163 // Ugh. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
164 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
165 std::size_t len = strlen (msg); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
166 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
167 if (len > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
168 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
169 if (msg[len - 1] == '\n') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
170 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
171 if (len > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
172 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
173 std::string tmp_msg (msg, len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
174 f (id, "%s\n", tmp_msg.c_str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
175 retval = tmp_msg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
176 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
177 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
178 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
179 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
180 f (id, "%s", msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
181 retval = msg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
182 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
183 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
184 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
185 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
186 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
187 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
188 // Determine whether the first argument to error or warning function |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
189 // should be handled as the message identifier or as the format string. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
190 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
191 static bool |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
192 maybe_extract_message_id (const std::string& caller, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
193 const octave_value_list& args, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
194 octave_value_list& nargs, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
195 std::string& id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
196 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
197 nargs = args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
198 id = ""; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
199 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
200 int nargin = args.length (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
201 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
202 bool have_fmt = nargin > 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
203 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
204 if (nargin > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
205 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
206 std::string arg1 = args(0).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
207 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
208 // For compatibility with Matlab, an identifier must contain ':', |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
209 // but not at the beginning or the end, and it must not contain '%' |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
210 // (even if it is not a valid conversion operator) or whitespace. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
211 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
212 if (arg1.find_first_of ("% \f\n\r\t\v") == std::string::npos |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
213 && arg1.find (':') != std::string::npos |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
214 && arg1[0] != ':' |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
215 && arg1.back () != ':') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
216 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
217 if (nargin > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
218 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
219 id = arg1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
220 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
221 nargs.resize (nargin-1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
222 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
223 for (int i = 1; i < nargin; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
224 nargs(i-1) = args(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
225 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
226 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
227 nargs(0) = "call to " + caller |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
228 + " with message identifier '" + arg1 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
229 + "' requires message"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
230 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
231 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
232 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
233 return have_fmt; |
4318 | 234 } |
235 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
236 namespace octave |
5567 | 237 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
238 static octave_scalar_map |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
239 init_warning_options (const std::string& state) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
240 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
241 octave_scalar_map initw; |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
242 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
243 initw.setfield ("identifier", "all"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
244 initw.setfield ("state", state); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
245 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
246 return initw; |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
247 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
248 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
249 static octave_map |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
250 init_error_stack (interpreter& interp) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
251 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
252 tree_evaluator& tw = interp.get_evaluator (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
253 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
254 return tw.empty_backtrace (); |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
255 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
256 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
257 error_system::error_system (interpreter& interp) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
258 : m_interpreter (interp), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
259 m_debug_on_error (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
260 m_debug_on_caught (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
261 m_debug_on_warning (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
262 m_discard_warning_messages (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
263 m_beep_on_error (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
264 m_backtrace_on_warning (true), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
265 m_verbose_warning (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
266 m_quiet_warning (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
267 m_warning_options (init_warning_options ("on")), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
268 m_last_error_message (), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
269 m_last_warning_message (), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
270 m_last_warning_id (), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
271 m_last_error_id (), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
272 m_last_error_stack (init_error_stack (interp)) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
273 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
274 initialize_default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
275 } |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
276 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
277 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
278 error_system::debug_on_error (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
279 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
280 return set_internal_variable (m_debug_on_error, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
281 "debug_on_error"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
282 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
283 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
284 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
285 error_system::debug_on_caught (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
286 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
287 return set_internal_variable (m_debug_on_caught, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
288 "debug_on_caught"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
289 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
290 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
291 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
292 error_system::debug_on_warning (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
293 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
294 return set_internal_variable (m_debug_on_warning, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
295 "debug_on_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
296 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
297 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
298 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
299 error_system::discard_warning_messages (const octave_value_list& args, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
300 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
301 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
302 return set_internal_variable (m_discard_warning_messages, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
303 "discard_warning_messages"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
304 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
305 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
306 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
307 error_system::beep_on_error (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
308 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
309 return set_internal_variable (m_beep_on_error, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
310 "beep_on_error"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
311 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
312 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
313 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
314 error_system::backtrace_on_warning (const octave_value_list& args, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
315 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
316 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
317 return set_internal_variable (m_backtrace_on_warning, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
318 "backtrace_on_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
319 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
320 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
321 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
322 error_system::verbose_warning (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
323 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
324 return set_internal_variable (m_verbose_warning, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
325 "verbose_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
326 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
327 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
328 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
329 error_system::quiet_warning (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
330 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
331 return set_internal_variable (m_quiet_warning, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
332 "quiet_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
333 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
334 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
335 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
336 error_system::last_error_message (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
337 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
338 return set_internal_variable (m_last_error_message, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
339 "last_error_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
340 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
341 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
342 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
343 error_system::last_warning_message (const octave_value_list& args, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
344 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
345 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
346 return set_internal_variable (m_last_warning_message, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
347 "last_warning_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
348 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
349 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
350 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
351 error_system::last_warning_id (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
352 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
353 return set_internal_variable (m_last_warning_id, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
354 "last_warning_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
355 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
356 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
357 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
358 error_system::last_error_id (const octave_value_list& args, int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
359 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
360 return set_internal_variable (m_last_error_id, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
361 "last_error_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
362 } |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
363 |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
364 // Use static fields for the best efficiency. |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
365 // NOTE: C++0x will allow these two to be merged into one. |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
366 static const char *bt_fieldnames[] = |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
367 { "file", "name", "line", "column", nullptr }; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
368 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
369 static const octave_fields bt_fields (bt_fieldnames); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
370 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
371 octave_map |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
372 error_system::make_stack_map (const std::list<frame_info>& frames) |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
373 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
374 std::size_t nframes = frames.size (); |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
375 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
376 octave_map retval (dim_vector (nframes, 1), bt_fields); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
377 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
378 Cell& file = retval.contents (0); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
379 Cell& name = retval.contents (1); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
380 Cell& line = retval.contents (2); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
381 Cell& column = retval.contents (3); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
382 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
383 bool have_column = false; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
384 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
385 octave_idx_type k = 0; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
386 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
387 for (const auto& frm : frames) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
388 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
389 file(k) = frm.file_name (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
390 name(k) = frm.fcn_name (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
391 line(k) = frm.line (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
392 int c = frm.column (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
393 if (c > 0) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
394 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
395 have_column = true; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
396 column(k) = c; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
397 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
398 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
399 k++; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
400 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
401 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
402 if (! have_column) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
403 retval.rmfield ("column"); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
404 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
405 return retval; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
406 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
407 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
408 std::list<frame_info> |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
409 error_system::make_stack_frame_list (const octave_map& stack) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
410 { |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
411 std::list<frame_info> frames; |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
412 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
413 Cell file = stack.contents ("file"); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
414 Cell name = stack.contents ("name"); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
415 Cell line = stack.contents ("line"); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
416 Cell column; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
417 bool have_column = false; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
418 if (stack.contains ("column")) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
419 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
420 have_column = true; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
421 column = stack.contents ("column"); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
422 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
423 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
424 octave_idx_type nel = name.numel (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
425 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
426 for (octave_idx_type i = 0; i < nel; i++) |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
427 frames.push_back (frame_info (file(i).string_value (), |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
428 name(i).string_value (), |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
429 line(i).int_value (), |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
430 (have_column |
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28823
diff
changeset
|
431 ? column(i).int_value () : -1))); |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
432 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
433 return frames; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
434 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
435 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
436 // For given warning ID, return 0 if warnings are disabled, 1 if |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
437 // enabled, and 2 if the given ID should be an error instead of a |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
438 // warning. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
439 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
440 int error_system::warning_enabled (const std::string& id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
441 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
442 int retval = 0; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
443 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
444 int all_state = -1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
445 int id_state = -1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
446 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
447 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
448 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
449 octave_idx_type nel = opts.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
450 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
451 if (nel > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
452 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
453 Cell identifier = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
454 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
455 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
456 bool all_found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
457 bool id_found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
458 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
459 for (octave_idx_type i = 0; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
460 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
461 octave_value ov = identifier(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
462 std::string ovs = ov.string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
463 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
464 if (! all_found && ovs == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
465 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
466 all_state = check_state (state(i).string_value ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
467 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
468 if (all_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
469 all_found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
470 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
471 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
472 if (! id_found && ovs == id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
473 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
474 id_state = check_state (state(i).string_value ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
475 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
476 if (id_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
477 id_found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
478 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
479 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
480 if (all_found && id_found) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
481 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
482 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
483 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
484 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
485 // If "all" is not present, assume warnings are enabled. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
486 if (all_state == -1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
487 all_state = 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
488 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
489 if (all_state == 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
490 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
491 if (id_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
492 retval = id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
493 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
494 else if (all_state == 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
495 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
496 if (id_state == 0 || id_state == 2) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
497 retval = id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
498 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
499 retval = all_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
500 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
501 else if (all_state == 2) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
502 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
503 if (id_state == 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
504 retval= id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
505 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
506 retval = all_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
507 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
508 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
509 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
510 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
511 |
27471 | 512 void error_system::vusage (const char *id, const char *fmt, va_list args) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
513 { |
27471 | 514 std::string str_id = id ? id : ""; |
515 std::string message = format_message (fmt, args); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
516 |
27471 | 517 throw_error ("usage", id, message); |
518 } | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
519 |
27471 | 520 void error_system::vwarning (const char *name, const char *id, |
521 const char *fmt, va_list args) | |
522 { | |
523 flush_stdout (); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
524 |
27471 | 525 std::string base_msg = format_message (fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
526 std::string msg_string; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
527 |
27471 | 528 if (name) |
529 msg_string = std::string (name) + ": "; | |
530 | |
531 msg_string += base_msg; | |
532 | |
533 bool fmt_suppresses_backtrace = false; | |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
534 std::size_t fmt_len = (fmt ? strlen (fmt) : 0); |
27471 | 535 fmt_suppresses_backtrace = (fmt_len > 0 && fmt[fmt_len-1] == '\n'); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
536 |
27471 | 537 if (! fmt_suppresses_backtrace) |
538 msg_string += '\n'; | |
539 | |
540 last_warning_id (id); | |
541 last_warning_message (base_msg); | |
542 | |
543 if (discard_warning_messages ()) | |
544 return; | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
545 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
546 tree_evaluator& tw = m_interpreter.get_evaluator (); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
547 |
27471 | 548 bool in_user_code = tw.in_user_code (); |
549 | |
550 if (! quiet_warning ()) | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
551 { |
27471 | 552 octave_diary << msg_string; |
553 std::cerr << msg_string; | |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
554 |
27471 | 555 if (! fmt_suppresses_backtrace && in_user_code |
556 && backtrace_on_warning () | |
557 && ! discard_warning_messages ()) | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
558 { |
27471 | 559 std::string bt_msg = tw.backtrace_message (); |
560 | |
561 if (! bt_msg.empty ()) | |
562 bt_msg = "warning: called from\n" + bt_msg; | |
563 | |
564 octave_diary << bt_msg << std::endl; | |
565 std::cerr << bt_msg << std::endl; | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
566 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
567 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
568 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
569 bp_table& bptab = tw.get_bp_table (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
570 |
27471 | 571 if ((m_interpreter.interactive () |
572 || application::forced_interactive ()) | |
573 && debug_on_warning () && in_user_code && bptab.debug_on_warn (id)) | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
574 { |
28823
26cfccfee9a0
Replace unwind_protect with more efficient constructs (bug #59192).
Rik <rik@octave.org>
parents:
28752
diff
changeset
|
575 unwind_protect_var<bool> restore_var (m_debug_on_warning, false); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
576 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
577 tw.enter_debugger (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
578 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
579 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
580 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
581 void error_system::error_1 (execution_exception& ee, const char *id, |
27471 | 582 const char *fmt, va_list args) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
583 { |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
584 ee.set_identifier (id); |
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
585 ee.set_message (format_message (fmt, args)); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
586 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
587 throw_error (ee); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
588 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
589 |
27471 | 590 void error_system::error_1 (const char *id, const char *fmt, |
591 va_list args) | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
592 { |
27471 | 593 std::string message = format_message (fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
594 |
27471 | 595 std::list<frame_info> stack_info; |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
596 |
27471 | 597 throw_error ("error", id, message); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
598 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
599 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
600 void error_system::vwarning (const char *id, const char *fmt, va_list args) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
601 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
602 int warn_opt = warning_enabled (id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
603 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
604 if (warn_opt == 2) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
605 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
606 // Handle this warning as an error. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
607 |
27471 | 608 error_1 (id, fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
609 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
610 else if (warn_opt == 1) |
27471 | 611 vwarning ("warning", id, fmt, args); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
612 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
613 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
614 void error_system::rethrow_error (const std::string& id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
615 const std::string& msg, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
616 const octave_map& stack) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
617 { |
27471 | 618 std::list<frame_info> stack_info; |
619 | |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
620 execution_exception ee ("error", id, msg, stack_info); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
621 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
622 if (! stack.isempty () |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
623 && ! (stack.contains ("file") && stack.contains ("name") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
624 && stack.contains ("line"))) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
625 error ("rethrow: STACK struct must contain the fields 'file', 'name', and 'line'"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
626 |
27471 | 627 if (! stack.isempty ()) |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
628 ee.set_stack_info (make_stack_frame_list (stack)); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
629 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
630 throw_error (ee); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
631 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
632 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
633 void error_system::vpanic (const char *fmt, va_list args) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
634 { |
27471 | 635 // Is there any point in trying to write the panic message to the |
636 // diary? | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
637 |
27471 | 638 std::cerr << "panic: " << format_message (fmt, args) << std::endl; |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
639 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
640 abort (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
641 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
642 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
643 void error_system::panic (const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
644 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
645 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
646 va_start (args, fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
647 vpanic (fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
648 va_end (args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
649 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
650 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
651 octave_scalar_map error_system::warning_query (const std::string& id_arg) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
652 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
653 octave_scalar_map retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
654 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
655 std::string id = id_arg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
656 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
657 if (id == "last") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
658 id = last_warning_id (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
659 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
660 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
661 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
662 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
663 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
664 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
665 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
666 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
667 assert (nel != 0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
668 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
669 bool found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
670 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
671 std::string val; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
672 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
673 for (octave_idx_type i = 0; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
674 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
675 if (ident(i).string_value () == id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
676 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
677 val = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
678 found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
679 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
680 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
681 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
682 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
683 if (! found) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
684 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
685 for (octave_idx_type i = 0; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
686 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
687 if (ident(i).string_value () == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
688 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
689 val = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
690 found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
691 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
692 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
693 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
694 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
695 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
696 // The warning state "all" is always supposed to remain in the list, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
697 // so we should always find a state, either explicitly or by using the |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
698 // state for "all". |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
699 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
700 assert (found); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
701 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
702 retval.assign ("identifier", id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
703 retval.assign ("state", val); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
704 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
705 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
706 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
707 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
708 std::string error_system::default_warning_state (void) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
709 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
710 std::string retval = "on"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
711 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
712 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
713 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
714 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
715 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
716 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
717 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
718 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
719 for (octave_idx_type i = 0; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
720 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
721 if (ident(i).string_value () == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
722 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
723 retval = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
724 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
725 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
726 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
727 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
728 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
729 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
730 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
731 void error_system::display_warning_options (std::ostream& os) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
732 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
733 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
734 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
735 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
736 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
737 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
738 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
739 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
740 std::string all_state = default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
741 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
742 if (all_state == "on") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
743 os << "By default, warnings are enabled."; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
744 else if (all_state == "off") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
745 os << "By default, warnings are disabled."; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
746 else if (all_state == "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
747 os << "By default, warnings are treated as errors."; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
748 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
749 panic_impossible (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
750 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
751 if (nel > 1) |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
752 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
753 os << "\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
754 os << "Non-default warning states are:\n\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
755 os << " State Warning ID\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
756 } |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
757 |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
758 // The state for "all" is always supposed to be first in the list. |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
759 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
760 for (octave_idx_type i = 1; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
761 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
762 std::string tid = ident(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
763 std::string tst = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
764 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
765 os << std::setw (7) << tst << " " << tid << "\n"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
766 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
767 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
768 os << std::endl; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
769 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
770 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
771 void error_system::set_warning_option (const std::string& state, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
772 const std::string& ident) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
773 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
774 std::string all_state = default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
775 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
776 if (state != "on" && state != "off" && state != "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
777 error ("invalid warning state: %s", state.c_str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
778 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
779 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
780 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
781 Cell tid = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
782 Cell tst = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
783 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
784 octave_idx_type nel = tid.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
785 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
786 for (octave_idx_type i = 0; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
787 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
788 if (tid(i).string_value () == ident) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
789 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
790 // We found it in the current list of options. If the state |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
791 // for "all" is same as arg1, we can simply remove the item |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
792 // from the list. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
793 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
794 if (state == all_state && ident != "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
795 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
796 for (i = i + 1; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
797 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
798 tid(i-1) = tid(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
799 tst(i-1) = tst(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
800 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
801 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
802 tid.resize (dim_vector (1, nel-1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
803 tst.resize (dim_vector (1, nel-1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
804 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
805 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
806 tst(i) = state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
807 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
808 opts.clear (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
809 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
810 opts.assign ("identifier", tid); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
811 opts.assign ("state", tst); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
812 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
813 warning_options (opts); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
814 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
815 return; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
816 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
817 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
818 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
819 // The option wasn't already in the list. Append it. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
820 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
821 tid.resize (dim_vector (1, nel+1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
822 tst.resize (dim_vector (1, nel+1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
823 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
824 tid(nel) = ident; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
825 tst(nel) = state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
826 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
827 opts.clear (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
828 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
829 opts.assign ("identifier", tid); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
830 opts.assign ("state", tst); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
831 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
832 warning_options (opts); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
833 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
834 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
835 void error_system::disable_warning (const std::string& id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
836 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
837 set_warning_option ("off", id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
838 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
839 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
840 void error_system::initialize_default_warning_state (void) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
841 { |
27471 | 842 warning_options (init_warning_options ("on")); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
843 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
844 // Most people will want to have the following disabled. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
845 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
846 disable_warning ("Octave:array-as-logical"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
847 disable_warning ("Octave:array-to-scalar"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
848 disable_warning ("Octave:array-to-vector"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
849 disable_warning ("Octave:imag-to-real"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
850 disable_warning ("Octave:language-extension"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
851 disable_warning ("Octave:missing-semicolon"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
852 disable_warning ("Octave:neg-dim-as-zero"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
853 disable_warning ("Octave:separator-insert"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
854 disable_warning ("Octave:single-quote-string"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
855 disable_warning ("Octave:str-to-num"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
856 disable_warning ("Octave:mixed-string-concat"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
857 disable_warning ("Octave:variable-switch-label"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
858 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
859 |
27471 | 860 void error_system::interpreter_try (unwind_protect& frame) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
861 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
862 frame.protect_var (m_debug_on_error); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
863 m_debug_on_error = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
864 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
865 frame.protect_var (m_debug_on_warning); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
866 m_debug_on_warning = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
867 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
868 // Leave debug_on_caught as it was, so errors in try/catch are still |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
869 // caught. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
870 } |
27471 | 871 |
872 void error_system::throw_error (const std::string& err_type, | |
873 const std::string& id, | |
874 const std::string& message, | |
875 const std::list<frame_info>& stack_info_arg) | |
876 { | |
877 std::list<frame_info> stack_info = stack_info_arg; | |
878 | |
879 if (stack_info.empty ()) | |
880 { | |
881 tree_evaluator& tw = m_interpreter.get_evaluator (); | |
882 | |
883 stack_info = tw.backtrace_info (); | |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
884 |
27471 | 885 // Print the error message only if it is different from the |
886 // previous one; makes the output more concise and readable. | |
887 | |
888 stack_info.unique (); | |
889 } | |
890 | |
891 execution_exception ex (err_type, id, message, stack_info); | |
892 | |
893 throw_error (ex); | |
894 } | |
895 | |
896 void error_system::throw_error (execution_exception& ex) | |
897 { | |
898 throw ex; | |
899 } | |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
900 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
901 void error_system::save_exception (const execution_exception& ee) |
27471 | 902 { |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
903 last_error_id (ee.identifier ()); |
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
904 std::string message = ee.message (); |
27471 | 905 std::string xmsg |
906 = (message.size () > 0 && message.back () == '\n' | |
907 ? message.substr (0, message.size () - 1) : message); | |
908 last_error_message (xmsg); | |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
909 last_error_stack (make_stack_map (ee.stack_info ())); |
27471 | 910 } |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
911 |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
912 // DEPRECATED in Octave 7. |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
913 void error_system::display_exception (const execution_exception& ee, |
27471 | 914 std::ostream& os) const |
915 { | |
916 if (m_beep_on_error) | |
917 os << "\a"; | |
918 | |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
919 ee.display (octave_diary); |
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
920 ee.display (os); |
27471 | 921 } |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
922 |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
923 void error_system::display_exception (const execution_exception& ee) const |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
924 { |
29502
76fdbe78884f
allow event manager to handle display of execution exceptions
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
925 // FIXME: How should we handle beep_on_error? |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
926 |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
927 ee.display (octave_diary); |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
928 |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
929 // FIXME: Handle display using an event manager message so that the |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
930 // GUI or other client can receive error messages without needing to |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
931 // capture them from std::cerr or some other stream. |
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
932 |
29502
76fdbe78884f
allow event manager to handle display of execution exceptions
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
933 event_manager& evmgr = m_interpreter.get_event_manager (); |
76fdbe78884f
allow event manager to handle display of execution exceptions
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
934 |
76fdbe78884f
allow event manager to handle display of execution exceptions
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
935 evmgr.display_exception (ee, m_beep_on_error); |
27471 | 936 } |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
937 } |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
938 |
1 | 939 void |
6338 | 940 vmessage (const char *name, const char *fmt, va_list args) |
941 { | |
27471 | 942 std::string message; |
943 | |
944 if (name) | |
945 message = std::string (name) + ": "; | |
946 | |
947 message += format_message (fmt, args); | |
948 | |
949 octave_diary << message << std::endl; | |
950 std::cerr << message << std::endl; | |
6338 | 951 } |
952 | |
953 void | |
1 | 954 message (const char *name, const char *fmt, ...) |
955 { | |
956 va_list args; | |
957 va_start (args, fmt); | |
6338 | 958 vmessage (name, fmt, args); |
1 | 959 va_end (args); |
960 } | |
961 | |
962 void | |
6338 | 963 vusage_with_id (const char *id, const char *fmt, va_list args) |
964 { | |
27471 | 965 octave::error_system& es = octave::__get_error_system__ ("warning_enabled"); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
966 |
27471 | 967 es.vusage (id, fmt, args); |
6338 | 968 } |
969 | |
970 void | |
5567 | 971 usage_with_id (const char *id, const char *fmt, ...) |
972 { | |
973 va_list args; | |
974 va_start (args, fmt); | |
6338 | 975 vusage_with_id (id, fmt, args); |
1 | 976 va_end (args); |
977 } | |
978 | |
6000 | 979 void |
6338 | 980 verror (const char *fmt, va_list args) |
981 { | |
27471 | 982 error_1 ("", fmt, args); |
6338 | 983 } |
984 | |
985 void | |
6000 | 986 error (const char *fmt, ...) |
987 { | |
988 va_list args; | |
989 va_start (args, fmt); | |
6338 | 990 verror (fmt, args); |
6000 | 991 va_end (args); |
992 } | |
993 | |
994 void | |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
995 verror (octave::execution_exception& ee, 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
|
996 { |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
997 error_1 (ee, "", fmt, args); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
998 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
999 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1000 void |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
1001 error (octave::execution_exception& ee, const char *fmt, ...) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1002 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1003 va_list args; |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1004 va_start (args, fmt); |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
1005 verror (ee, fmt, args); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1006 va_end (args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1007 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1008 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1009 void |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1010 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
|
1011 { |
27471 | 1012 error_1 ("", fmt, args); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1013 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1014 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1015 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1016 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
|
1017 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1018 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1019 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1020 verror_with_cfn (fmt, args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1021 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1022 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1023 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1024 void |
6338 | 1025 verror_with_id (const char *id, const char *fmt, va_list args) |
1026 { | |
27471 | 1027 error_1 (id, fmt, args); |
6338 | 1028 } |
1029 | |
1030 void | |
6000 | 1031 error_with_id (const char *id, const char *fmt, ...) |
1032 { | |
1033 va_list args; | |
1034 va_start (args, fmt); | |
6338 | 1035 verror_with_id (id, fmt, args); |
6000 | 1036 va_end (args); |
1037 } | |
1038 | |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1039 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1040 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
|
1041 { |
27471 | 1042 error_1 (id, fmt, args); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1043 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1044 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1045 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1046 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
|
1047 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1048 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1049 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1050 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
|
1051 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1052 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1053 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1054 int warning_enabled (const std::string& id) |
1 | 1055 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1056 octave::error_system& es = octave::__get_error_system__ ("warning_enabled"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1057 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1058 return es.warning_enabled (id); |
1 | 1059 } |
1060 | |
1061 void | |
6338 | 1062 vwarning (const char *fmt, va_list args) |
1063 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1064 vwarning ("", fmt, args); |
6338 | 1065 } |
1066 | |
1067 void | |
5567 | 1068 warning (const char *fmt, ...) |
1069 { | |
1070 va_list args; | |
1071 va_start (args, fmt); | |
6338 | 1072 vwarning (fmt, args); |
5567 | 1073 va_end (args); |
1074 } | |
1075 | |
1076 void | |
6338 | 1077 vwarning_with_id (const char *id, const char *fmt, va_list args) |
1078 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1079 vwarning (id, fmt, args); |
6338 | 1080 } |
1081 | |
1082 void | |
5567 | 1083 warning_with_id (const char *id, const char *fmt, ...) |
1084 { | |
1085 va_list args; | |
1086 va_start (args, fmt); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1087 vwarning (id, fmt, args); |
5567 | 1088 va_end (args); |
1089 } | |
1090 | |
1091 void | |
6338 | 1092 vparse_error (const char *fmt, va_list args) |
1093 { | |
27471 | 1094 error_1 ("", fmt, args); |
6338 | 1095 } |
1096 | |
1097 void | |
1005 | 1098 parse_error (const char *fmt, ...) |
1099 { | |
1100 va_list args; | |
1101 va_start (args, fmt); | |
6338 | 1102 vparse_error (fmt, args); |
5567 | 1103 va_end (args); |
1104 } | |
1105 | |
1106 void | |
6338 | 1107 vparse_error_with_id (const char *id, const char *fmt, va_list args) |
1108 { | |
27471 | 1109 error_1 (id, fmt, args); |
6338 | 1110 } |
1111 | |
1112 void | |
5567 | 1113 parse_error_with_id (const char *id, const char *fmt, ...) |
1114 { | |
1115 va_list args; | |
1116 va_start (args, fmt); | |
6338 | 1117 vparse_error_with_id (id, fmt, args); |
1 | 1118 va_end (args); |
1119 } | |
1120 | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1121 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1122 void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1123 vpanic (const char *fmt, va_list args) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1124 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1125 octave::error_system& es = octave::__get_error_system__ ("vpanic"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1126 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1127 es.vpanic (fmt, args); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1128 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1129 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1130 OCTAVE_NORETURN |
6361 | 1131 void |
1 | 1132 panic (const char *fmt, ...) |
1133 { | |
1134 va_list args; | |
1135 va_start (args, fmt); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1136 vpanic (fmt, args); |
4732 | 1137 va_end (args); |
1138 } | |
1139 | |
1140 void | |
1141 defun_usage_message (const std::string& msg) | |
1142 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1143 defun_usage_message ("%s", msg.c_str ()); |
528 | 1144 } |
1145 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1146 DEFMETHOD (rethrow, interp, args, , |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1147 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
|
1148 @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
|
1149 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
|
1150 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1151 @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
|
1152 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
|
1153 @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
|
1154 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
|
1155 @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
|
1156 @end deftypefn */) |
6361 | 1157 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20817
diff
changeset
|
1158 if (args.length () != 1) |
6959 | 1159 print_usage (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1160 |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1161 const octave_scalar_map err = args(0).scalar_map_value (); |
6361 | 1162 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1163 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
|
1164 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
|
1165 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1166 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
|
1167 std::string id = err.contents ("identifier").string_value (); |
6483 | 1168 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1169 octave_map err_stack = octave::init_error_stack (interp); |
6483 | 1170 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1171 if (err.contains ("stack")) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1172 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
|
1173 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1174 octave::error_system& es = interp.get_error_system (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1175 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1176 es.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
|
1177 |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
1178 return ovl (); |
6361 | 1179 } |
1180 | |
27471 | 1181 DEFMETHOD (error, interp, args, , |
1182 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
|
1183 @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
|
1184 @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
|
1185 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
|
1186 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1187 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
|
1188 @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
|
1189 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
|
1190 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
|
1191 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
|
1192 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1193 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
|
1194 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
|
1195 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
|
1196 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1197 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
|
1198 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
|
1199 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
|
1200 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1201 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1202 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1203 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
|
1204 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
|
1205 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
|
1206 @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
|
1207 @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
|
1208 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1209 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1210 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
|
1211 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
|
1212 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1213 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1214 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1215 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1216 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
|
1217 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
|
1218 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
|
1219 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
|
1220 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
|
1221 @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
|
1222 @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
|
1223 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1224 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
|
1225 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
|
1226 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
|
1227 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
|
1228 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
|
1229 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1230 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1231 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1232 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
|
1233 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1234 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
|
1235 @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
|
1236 @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
|
1237 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1238 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
|
1239 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
|
1240 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
|
1241 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
|
1242 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1243 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1244 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1245 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
|
1246 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
|
1247 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
|
1248 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
|
1249 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
|
1250 @dots{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1251 endif |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1252 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
|
1253 @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
|
1254 @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
|
1255 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1256 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1257 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
|
1258 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1259 Implementation Note: For compatibility with @sc{matlab}, escape |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28981
diff
changeset
|
1260 sequences in @var{template} (e.g., @qcode{"@backslashchar{}n"} => |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1261 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
|
1262 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
|
1263 disable escape sequence expansion use a second backslash before the sequence |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28981
diff
changeset
|
1264 (e.g., @qcode{"@backslashchar{}@backslashchar{}n"}) or use the |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1265 @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
|
1266 @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
|
1267 @end deftypefn */) |
897 | 1268 { |
7252 | 1269 |
1270 int nargin = args.length (); | |
1271 | |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1272 if (nargin == 0) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1273 print_usage (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1274 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1275 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1276 |
7252 | 1277 std::string id; |
27471 | 1278 std::string message; |
1279 std::list<octave::frame_info> stack_info; | |
7252 | 1280 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1281 bool have_fmt = false; |
5567 | 1282 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1283 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
|
1284 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1285 // 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
|
1286 if (args(0).isempty ()) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1287 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
|
1288 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1289 octave_scalar_map m = args(0).scalar_map_value (); |
7252 | 1290 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1291 // 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
|
1292 if (m.nfields () == 0) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1293 return retval; |
7252 | 1294 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1295 if (m.contains ("message")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1296 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1297 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
|
1298 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1299 if (c.is_string ()) |
27471 | 1300 message = 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
|
1301 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1302 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1303 if (m.contains ("identifier")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1304 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1305 octave_value c = m.getfield ("identifier"); |
7252 | 1306 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1307 if (c.is_string ()) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1308 id = c.string_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1309 } |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1310 |
27471 | 1311 if (m.contains ("stack")) |
1312 { | |
1313 octave_value c = m.getfield ("stack"); | |
1314 | |
1315 if (c.isstruct ()) | |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1316 stack_info |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1317 = octave::error_system::make_stack_frame_list (c.map_value ()); |
27471 | 1318 } |
7252 | 1319 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1320 else |
27471 | 1321 { |
1322 octave_value_list nargs = args; | |
1323 | |
1324 have_fmt = maybe_extract_message_id ("error", args, nargs, id); | |
1325 | |
1326 if (nargs.length () == 0) | |
1327 message = "unspecified error"; | |
1328 else | |
1329 { | |
1330 octave_value arg; | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1331 |
27471 | 1332 if (have_fmt) |
1333 { | |
1334 octave_value_list tmp = Fsprintf (nargs, 1); | |
1335 arg = tmp(0); | |
1336 } | |
1337 else | |
1338 arg = nargs(0); | |
1339 | |
1340 if (arg.is_defined ()) | |
1341 { | |
1342 if (arg.isempty ()) | |
1343 message = ""; | |
1344 else if (arg.is_string ()) | |
1345 message = arg.string_value (); | |
1346 } | |
1347 } | |
1348 } | |
1349 | |
1350 if (message.empty ()) | |
1351 return retval; | |
1352 | |
1353 octave::error_system& es = interp.get_error_system (); | |
1354 | |
1355 es.throw_error ("error", id, message, stack_info); | |
7252 | 1356 |
3934 | 1357 return retval; |
1489 | 1358 } |
897 | 1359 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1360 DEFMETHOD (warning, interp, args, nargout, |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1361 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
|
1362 @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
|
1363 @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
|
1364 @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
|
1365 @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
|
1366 @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
|
1367 @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
|
1368 @deftypefnx {} {} warning (@var{state}, @var{id}, "local") |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1369 @deftypefnx {} {} warning (@var{warning_struct}) |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1370 @deftypefnx {} {@var{warning_struct} =} warning (@dots{}) |
25588
5f63ca41eacb
doc: Remove bad calling convention for warning with a mode struct (bug #54288)
Rik <rik@octave.org>
parents:
25579
diff
changeset
|
1371 @deftypefnx {} {} warning (@var{state}, @var{mode}) |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1372 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1373 Display a warning message or control the behavior of Octave's warning system. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1374 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1375 The first call form uses a template @var{template} and optional additional |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1376 arguments to display a message on the @code{stderr} stream. The message is |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1377 formatted using the same rules as the @code{printf} family of functions |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1378 (@pxref{Formatted Output}) and prefixed by the character string |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1379 @w{@samp{warning: }}. You should use this function when you want to notify the |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1380 user of an unusual condition, but only when it makes sense for your program to |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1381 go on. For example: |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1382 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1383 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1384 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1385 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
|
1386 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1387 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1388 |
26859
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1389 If the warning message does not end with a newline character, Octave will |
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1390 print a traceback of all the function calls leading to the warning. If the |
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1391 warning message does end in a newline character, Octave will suppress the |
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1392 traceback messages as it returns control to the top level. For more details |
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1393 and examples, see @ref{XREFerror,,error}. |
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1394 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1395 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
|
1396 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
|
1397 form @qcode{"NAMESPACE:WARNING-NAME"}. Octave's own warnings use the |
28961
d9d028b479ac
doc: Use @code{} within alternate text for @xref,@pxref macros in libinterp/
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
1398 @qcode{"Octave"} namespace (@pxref{XREFwarning_ids,,@code{warning_ids}}). For |
24441 | 1399 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
|
1400 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1401 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1402 @group |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1403 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
|
1404 "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
|
1405 @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
|
1406 @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
|
1407 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1408 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
|
1409 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
|
1410 @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
|
1411 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
|
1412 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1413 The optional output argument @var{warning_struct} is a structure or structure |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1414 array with fields @qcode{"state"} and @qcode{"identifier"}. The @var{state} |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1415 argument may have the following values: |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1416 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1417 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1418 @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
|
1419 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
|
1420 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
|
1421 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1422 @item @qcode{"error"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1423 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
|
1424 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
|
1425 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1426 @item @qcode{"query"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1427 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
|
1428 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1429 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1430 A structure or structure array @var{warning_struct}, with fields |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1431 @qcode{"state"} and @qcode{"identifier"}, may be given as an input to achieve |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1432 equivalent results. The following example shows how to temporarily disable a |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1433 warning and then restore its original state: |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1434 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1435 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1436 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1437 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1438 ## 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
|
1439 [~, id] = lastwarn (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1440 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
|
1441 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1442 ## 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
|
1443 warning (warnstate); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1444 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1445 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1446 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1447 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
|
1448 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
|
1449 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
|
1450 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
|
1451 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
|
1452 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
|
1453 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1454 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
|
1455 @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
|
1456 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
|
1457 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1458 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
|
1459 modes @var{mode}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1460 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1461 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1462 @item @qcode{"backtrace"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1463 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
|
1464 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1465 @item @qcode{"verbose"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1466 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
|
1467 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1468 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1469 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
|
1470 @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
|
1471 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1472 Implementation Note: For compatibility with @sc{matlab}, escape sequences in |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28981
diff
changeset
|
1473 @var{template} (e.g., @qcode{"@backslashchar{}n"} => newline) are processed |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1474 regardless of whether @var{template} has been defined with single quotes, as |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1475 long as there are two or more input arguments. To disable escape sequence |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1476 expansion use a second backslash before the sequence (e.g., |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28981
diff
changeset
|
1477 @qcode{"@backslashchar{}@backslashchar{}n"}) or use the |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1478 @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
|
1479 @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
|
1480 @end deftypefn */) |
1489 | 1481 { |
5567 | 1482 octave_value retval; |
3934 | 1483 |
5567 | 1484 int nargin = args.length (); |
3935 | 1485 bool done = false; |
3934 | 1486 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1487 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1488 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1489 if (nargin > 0 && args.all_strings_p ()) |
3935 | 1490 { |
1491 string_vector argv = args.make_argv ("warning"); | |
1492 | |
20996 | 1493 std::string arg1 = argv[1]; |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1494 std::transform (arg1.begin (), arg1.end (), arg1.begin (), tolower); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1495 std::string arg2 = "all"; |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1496 std::string arg2_lc = "all"; |
5567 | 1497 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1498 if (nargin >= 2) |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1499 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1500 arg2 = argv[2]; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1501 arg2_lc = arg2; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1502 std::transform (arg2_lc.begin (), arg2_lc.end (), arg2_lc.begin (), |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1503 tolower); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1504 } |
5567 | 1505 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1506 if (arg1 == "on" || arg1 == "off" || arg1 == "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1507 { |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1508 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1509 octave_map old_warning_options; |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1510 if (arg2_lc == "all") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1511 old_warning_options = es.warning_options (); |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1512 else |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1513 old_warning_options = octave_map (es.warning_query (arg2)); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1514 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1515 if (nargin == 3) |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1516 { |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1517 std::string arg3_lc = argv[3]; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1518 std::transform (arg3_lc.begin (), arg3_lc.end (), |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1519 arg3_lc.begin (), tolower); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1520 if (arg3_lc == "local" && ! interp.at_top_level ()) |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1521 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1522 octave_scalar_map val = es.warning_query (arg2); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1523 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1524 octave_value curr_state = val.contents ("state"); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1525 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1526 // FIXME: this might be better with a dictionary object. |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1527 octave::tree_evaluator& tw = interp.get_evaluator (); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1528 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1529 octave_value curr_warning_states |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1530 = tw.get_auto_fcn_var (octave::stack_frame::SAVED_WARNING_STATES); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1531 |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1532 octave_map m; |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1533 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1534 if (curr_warning_states.is_defined ()) |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1535 m = curr_warning_states.map_value (); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1536 else |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1537 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1538 string_vector fields (2); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1539 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1540 fields(0) = "identifier"; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1541 fields(1) = "state"; |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1542 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1543 m = octave_map (dim_vector (0, 1), fields); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1544 } |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1545 |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1546 Cell ids = m.contents ("identifier"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1547 Cell states = m.contents ("state"); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1548 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1549 octave_idx_type nel = states.numel (); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1550 bool found = false; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1551 octave_idx_type i; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1552 for (i = 0; i < nel; i++) |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1553 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1554 std::string id = ids(i).string_value (); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1555 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1556 if (id == arg2) |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1557 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1558 states(i) = curr_state; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1559 found = true; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1560 break; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1561 } |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1562 } |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1563 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1564 if (! found) |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1565 { |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1566 m.resize (dim_vector (nel+1, 1)); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1567 |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1568 ids.resize (dim_vector (nel+1, 1)); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1569 states.resize (dim_vector (nel+1, 1)); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1570 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1571 ids(nel) = arg2; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1572 states(nel) = curr_state; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1573 } |
3934 | 1574 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1575 m.contents ("identifier") = ids; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1576 m.contents ("state") = states; |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1577 |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1578 tw.set_auto_fcn_var (octave::stack_frame::SAVED_WARNING_STATES, m); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1579 |
28271
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1580 // Now ignore the "local" argument, |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1581 // and continue to handle the current setting. |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1582 nargin--; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1583 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1584 } |
7202 | 1585 |
28271
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1586 if ((nargin == 1 |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1587 && (arg1 == "on" || arg1 == "off" || arg1 == "error")) |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1588 || (nargin >= 2 && arg2_lc == "all")) |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1589 { |
28271
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1590 // If "all" is given implicitly or explicitly as ID. |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1591 if (arg1 == "error") |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1592 error (R"(warning: cannot specify "all" warning ID with state "error")"); |
7202 | 1593 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1594 octave_map tmp; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1595 |
28271
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1596 Cell id (1, 1); |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1597 Cell st (1, 1); |
7206 | 1598 |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1599 id(0) = "all"; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1600 st(0) = arg1; |
7206 | 1601 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1602 tmp.assign ("identifier", id); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1603 tmp.assign ("state", st); |
5582 | 1604 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1605 es.warning_options (tmp); |
5567 | 1606 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1607 done = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1608 } |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1609 else if (arg2_lc == "backtrace") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1610 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1611 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1612 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1613 es.backtrace_on_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1614 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1615 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1616 } |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1617 else if (arg2_lc == "debug") |
20678
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 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1620 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1621 es.debug_on_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1622 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1623 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1624 } |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1625 else if (arg2_lc == "verbose") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1626 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1627 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1628 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1629 es.verbose_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1630 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1631 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1632 } |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1633 else if (arg2_lc == "quiet") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1634 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1635 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1636 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1637 es.quiet_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1638 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1639 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1640 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1641 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1642 { |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1643 if (arg2_lc == "last") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1644 arg2 = es.last_warning_id (); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1645 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1646 es.set_warning_option (arg1, arg2); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1647 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1648 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1649 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1650 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1651 if (done && nargout > 0) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1652 retval = old_warning_options; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1653 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1654 else if (arg1 == "query") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1655 { |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1656 if (arg2_lc == "all") |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1657 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1658 if (nargout > 0) |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1659 retval = es.warning_options (); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1660 else |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1661 es.display_warning_options (octave_stdout); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1662 } |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1663 else if (arg2_lc == "backtrace" || arg2_lc == "debug" |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1664 || arg2_lc == "verbose" || arg2_lc == "quiet") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1665 { |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1666 if (nargout > 0) |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1667 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1668 octave_scalar_map tmp; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1669 tmp.assign ("identifier", arg2_lc); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1670 if (arg2_lc == "backtrace") |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1671 tmp.assign ("state", es.backtrace_on_warning () ? "on" : "off"); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1672 else if (arg2_lc == "debug") |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1673 tmp.assign ("state", es.debug_on_warning () ? "on" : "off"); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1674 else if (arg2_lc == "verbose") |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1675 tmp.assign ("state", es.verbose_warning () ? "on" : "off"); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1676 else |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1677 tmp.assign ("state", es.quiet_warning () ? "on" : "off"); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1678 |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1679 retval = tmp; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1680 } |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1681 else |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1682 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1683 if (arg2_lc == "backtrace") |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1684 octave_stdout << R"("backtrace" warning state is ")" << |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1685 (es.backtrace_on_warning () ? "on" : "off") << |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1686 "\"\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1687 else if (arg2_lc == "debug") |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1688 octave_stdout << R"("debug" warning state is ")" << |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1689 (es.debug_on_warning () ? "on" : "off") << |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1690 "\"\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1691 else if (arg2_lc == "verbose") |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1692 octave_stdout << R"("verbose" warning state is ")" << |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1693 (es.verbose_warning () ? "on" : "off") << |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1694 "\"\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1695 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1696 octave_stdout << R"("quiet" warning state is ")" << |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1697 (es.quiet_warning () ? "on" : "off") << |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1698 "\"\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1699 } |
20678
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 else |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1702 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1703 if (nargout > 0) |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1704 retval = es.warning_query (arg2); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1705 else |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1706 { |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1707 octave_scalar_map tmp = es.warning_query (arg2); |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1708 |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28280
diff
changeset
|
1709 octave_stdout << '"' << arg2 << R"(" warning state is ")" << |
28268
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1710 tmp.getfield ("state").string_value () << |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1711 "\"\n"; |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1712 } |
7eddf9608d61
Pretty print warning() output state when nargout==0 (bug #58296).
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1713 } |
20678
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 done = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1716 } |
3934 | 1717 } |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1718 else if (nargin == 0) |
5567 | 1719 { |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1720 if (nargout > 0) |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1721 retval = es.warning_options (); |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1722 else |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1723 es.display_warning_options (octave_stdout); |
3934 | 1724 |
5567 | 1725 done = true; |
1726 } | |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1727 else if (nargin == 1) |
5567 | 1728 { |
1729 octave_value arg = args(0); | |
1730 | |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1731 octave_map old_warning_options; |
5567 | 1732 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1733 if (arg.isstruct ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1734 { |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
1735 octave_map m = arg.map_value (); |
5567 | 1736 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1737 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
|
1738 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
|
1739 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1740 // 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
|
1741 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1742 Cell ident = m.contents ("identifier"); |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1743 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
|
1744 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1745 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
|
1746 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1747 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1748 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
|
1749 Cell oldstate (state); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1750 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1751 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
|
1752 { |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1753 std::string tid = ident(i).string_value (); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1754 oldstate(i) = es.warning_query (tid).getfield ("state"); |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1755 } |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1756 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
|
1757 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1758 // Set new values |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1759 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
|
1760 { |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1761 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
|
1762 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
|
1763 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1764 es.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
|
1765 } |
5567 | 1766 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1767 done = true; |
5567 | 1768 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1769 if (nargout > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1770 retval = old_warning_options; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1771 } |
5567 | 1772 } |
1773 | |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1774 if (! done) |
3935 | 1775 { |
5567 | 1776 octave_value_list nargs = args; |
1777 | |
1778 std::string id; | |
1779 | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1780 bool have_fmt = maybe_extract_message_id ("warning", args, nargs, id); |
5567 | 1781 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1782 std::string prev_msg = es.last_warning_message (); |
3935 | 1783 |
5567 | 1784 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
|
1785 "unspecified warning", nargs, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1786 have_fmt); |
3935 | 1787 |
1788 if (nargout > 0) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1789 retval = prev_msg; |
3935 | 1790 } |
1791 | |
3934 | 1792 return retval; |
1793 } | |
1794 | |
20963
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1795 /* |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1796 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1797 %!test <*51997> |
26596
cc0d942d0e20
Remove inconsistent warning "Octave:divide-by-zero" (bug #46650).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
26376
diff
changeset
|
1798 %! id = "Octave:logical-conversion"; |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1799 %! 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
|
1800 %! current_all = warning (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1801 %! 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
|
1802 %! 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
|
1803 %! previous = warning (current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1804 %! assert (previous, current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1805 %! 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
|
1806 %! assert (previous, current); |
27746
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1807 |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1808 %!test <*57290> |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1809 %! warning ("oN", "Octave:test-57290-ID"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1810 %! warnst = warning ("QUery", "Octave:test-57290-ID"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1811 %! assert (warnst.state, "on"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1812 %! assert (warnst.identifier, "Octave:test-57290-ID"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1813 %! warning ("OFF", "Octave:test-57290-ID"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1814 %! warnst = warning ("QUery", "ALL"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1815 %! idx = strcmp ({warnst.identifier}, "Octave:test-57290-ID"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1816 %! assert (warnst(idx).state, "off"); |
ae821ac9ec74
Change warning to be case insensitive about options (bug #57290).
Rik <rik@octave.org>
parents:
27472
diff
changeset
|
1817 |
28271
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1818 %!error <cannot specify "all" warning ID> warning ("error") |
5e1f4060289a
Make 1-input form "warning (STATE)" use special ID "all" (bug #58296).
Rik <rik@octave.org>
parents:
28268
diff
changeset
|
1819 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1820 */ |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1821 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1822 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1823 set_warning_state (const std::string& id, const std::string& state) |
5794 | 1824 { |
1825 octave_value_list args; | |
1826 | |
1827 args(1) = id; | |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1828 args(0) = state; |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1829 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1830 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1831 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1832 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1833 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1834 } |
5794 | 1835 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1836 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1837 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
|
1838 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1839 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1840 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1841 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1842 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1843 } |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1844 |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1845 void |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1846 disable_warning (const std::string& id) |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1847 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1848 octave::error_system& es = octave::__get_error_system__ ("disable_warning"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1849 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1850 es.disable_warning (id); |
5794 | 1851 } |
1852 | |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1853 DEFMETHOD (lasterror, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1854 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
|
1855 @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
|
1856 @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
|
1857 @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
|
1858 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
|
1859 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1860 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
|
1861 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
|
1862 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
|
1863 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1864 @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
|
1865 @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
|
1866 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
|
1867 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1868 @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
|
1869 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
|
1870 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1871 @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
|
1872 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
|
1873 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
|
1874 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
|
1875 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1876 @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
|
1877 @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
|
1878 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
|
1879 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1880 @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
|
1881 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
|
1882 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1883 @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
|
1884 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
|
1885 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1886 @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
|
1887 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
|
1888 @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
|
1889 @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
|
1890 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1891 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
|
1892 @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
|
1893 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
|
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 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
|
1896 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
|
1897 @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
|
1898 @end deftypefn */) |
6361 | 1899 { |
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
|
1900 int nargin = args.length (); |
6361 | 1901 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1902 if (nargin > 1) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1903 print_usage (); |
6361 | 1904 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1905 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1906 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1907 octave_scalar_map err; |
6361 | 1908 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1909 err.assign ("message", es.last_error_message ()); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1910 err.assign ("identifier", es.last_error_id ()); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1911 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1912 err.assign ("stack", octave_value (es.last_error_stack ())); |
7976
736124a4fa3d
lasterr, lasterror: unwind-protect error_state
John W. Eaton <jwe@octave.org>
parents:
7882
diff
changeset
|
1913 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1914 if (nargin == 1) |
6361 | 1915 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
1916 octave::tree_evaluator& tw = interp.get_evaluator (); |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1917 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1918 if (args(0).is_string ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1919 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
1920 if (args(0).string_value () != "reset") |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
1921 error ("lasterror: unrecognized string argument"); |
6361 | 1922 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1923 es.last_error_message (""); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1924 es.last_error_id (""); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1925 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
1926 es.last_error_stack (tw.empty_backtrace ()); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1927 } |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1928 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
|
1929 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1930 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
|
1931 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
|
1932 std::string new_error_message; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1933 std::string new_error_id; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1934 std::string new_error_file; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1935 std::string new_error_name; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1936 int new_error_line = -1; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1937 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
|
1938 bool initialize_stack = false; |
6361 | 1939 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1940 if (new_err.contains ("message")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1941 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1942 const std::string tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1943 = new_err.getfield ("message").string_value (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1944 new_error_message = tmp; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1945 } |
6361 | 1946 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1947 if (new_err.contains ("identifier")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1948 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1949 const std::string tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1950 = new_err.getfield ("identifier").string_value (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1951 new_error_id = tmp; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1952 } |
6361 | 1953 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1954 if (new_err.contains ("stack")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1955 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1956 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
|
1957 initialize_stack = true; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1958 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1959 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1960 new_err_stack |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1961 = new_err.getfield ("stack").scalar_map_value (); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1962 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1963 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
|
1964 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1965 const std::string tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1966 = new_err_stack.getfield ("file").string_value (); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1967 new_error_file = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1968 } |
6361 | 1969 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1970 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
|
1971 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1972 const std::string tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1973 = new_err_stack.getfield ("name").string_value (); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1974 new_error_name = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1975 } |
6361 | 1976 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1977 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
|
1978 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1979 const int tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1980 = new_err_stack.getfield ("line").nint_value (); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1981 new_error_line = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1982 } |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1983 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1984 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
|
1985 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1986 const int tmp |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
1987 = new_err_stack.getfield ("column").nint_value (); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1988 new_error_column = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1989 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1990 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1991 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1992 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1993 es.last_error_message (new_error_message); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1994 es.last_error_id (new_error_id); |
6361 | 1995 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1996 if (initialize_stack) |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
1997 es.last_error_stack (tw.empty_backtrace ()); |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
1998 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
|
1999 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2000 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
|
2001 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
|
2002 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
|
2003 new_err_stack.setfield ("column", new_error_column); |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2004 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2005 es.last_error_stack (new_err_stack); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2006 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2007 else |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
2008 es.last_error_stack (tw.backtrace ()); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2009 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2010 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2011 error ("lasterror: argument must be a structure or a string"); |
6361 | 2012 } |
2013 | |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21121
diff
changeset
|
2014 return ovl (err); |
6361 | 2015 } |
2016 | |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2017 /* |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2018 ## 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
|
2019 %!test |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2020 %! lasterror ("reset"); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2021 %! x = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2022 %! assert (x.identifier, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2023 %! assert (x.message, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2024 %! assert (isempty (x.stack)) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2025 %! lasterror (x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2026 %! y = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2027 %! assert (y, x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2028 */ |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2029 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2030 DEFMETHOD (lasterr, interp, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2031 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
|
2032 @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
|
2033 @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
|
2034 @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
|
2035 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
|
2036 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2037 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
|
2038 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
|
2039 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2040 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
|
2041 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2042 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
|
2043 @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
|
2044 @end deftypefn */) |
3935 | 2045 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2046 int nargin = args.length (); |
3935 | 2047 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2048 if (nargin > 2) |
5823 | 2049 print_usage (); |
3935 | 2050 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2051 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2052 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2053 string_vector argv = args.make_argv ("lasterr"); |
5567 | 2054 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2055 std::string prev_error_id = es.last_error_id (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2056 std::string prev_error_message = es.last_error_message (); |
5567 | 2057 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2058 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
|
2059 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2060 es.last_error_id (argv[2]); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2061 es.last_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
|
2062 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2063 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
|
2064 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2065 es.last_error_id (""); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2066 es.last_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
|
2067 } |
5567 | 2068 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2069 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
|
2070 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
|
2071 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2072 return ovl (); |
3935 | 2073 } |
2074 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2075 DEFMETHOD (lastwarn, interp, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2076 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
|
2077 @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
|
2078 @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
|
2079 @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
|
2080 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
|
2081 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2082 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
|
2083 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
|
2084 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2085 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
|
2086 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2087 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
|
2088 @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
|
2089 @end deftypefn */) |
3934 | 2090 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2091 int nargin = args.length (); |
5567 | 2092 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2093 if (nargin > 2) |
5823 | 2094 print_usage (); |
3934 | 2095 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2096 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2097 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2098 string_vector argv = args.make_argv ("lastwarn"); |
5567 | 2099 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2100 std::string prev_warning_id = es.last_warning_id (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2101 std::string prev_warning_message = es.last_warning_message (); |
3934 | 2102 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2103 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
|
2104 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2105 es.last_warning_id (argv[2]); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2106 es.last_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
|
2107 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2108 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
|
2109 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2110 es.last_warning_id (""); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2111 es.last_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
|
2112 } |
5567 | 2113 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2114 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
|
2115 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
|
2116 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2117 return ovl (); |
897 | 2118 } |
2119 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2120 DEFMETHOD (beep_on_error, interp, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2121 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
|
2122 @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
|
2123 @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
|
2124 @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
|
2125 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
|
2126 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
|
2127 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2128 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
|
2129 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
|
2130 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
|
2131 @end deftypefn */) |
3707 | 2132 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2133 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2134 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2135 return es.beep_on_error (args, nargout); |
3707 | 2136 } |
2137 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2138 DEFMETHOD (debug_on_error, interp, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2139 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
|
2140 @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
|
2141 @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
|
2142 @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
|
2143 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
|
2144 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
|
2145 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2146 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
|
2147 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
|
2148 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2149 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
|
2150 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
|
2151 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
|
2152 @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
|
2153 @end deftypefn */) |
5794 | 2154 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2155 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2156 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2157 return es.debug_on_error (args, nargout); |
5794 | 2158 } |
3707 | 2159 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2160 DEFMETHOD (debug_on_warning, interp, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2161 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
|
2162 @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
|
2163 @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
|
2164 @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
|
2165 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
|
2166 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
|
2167 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2168 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
|
2169 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
|
2170 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
|
2171 @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
|
2172 @end deftypefn */) |
5794 | 2173 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2174 octave::error_system& es = interp.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2175 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2176 return es.debug_on_warning (args, nargout); |
2174 | 2177 } |
2178 | |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2179 void |
27471 | 2180 interpreter_try (octave::unwind_protect& frame) |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2181 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2182 octave::error_system& es |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2183 = octave::__get_error_system__ ("interpreter_try"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2184 |
27471 | 2185 es.interpreter_try (frame); |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2186 } |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2187 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2188 // Deprecated variables and functions. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2189 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2190 // This variable is obsolete and always has the value 0. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2191 int error_state = 0; |