Mercurial > octave
annotate libinterp/corefcn/error.cc @ 27301:a2b1ba6c92d5
eliminate unnecessary application::interative function
* octave.h, octave.cc (application_interactive): Delete functions.
Change all uses to check interactive state of interpreter directly
from interpreter object.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sun, 28 Jul 2019 17:24:42 -0400 |
parents | 52542cfcc7dc |
children | fd32c1a9b1bd |
rev | line source |
---|---|
1 | 1 /* |
2 | |
26376
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
26350
diff
changeset
|
3 Copyright (C) 1993-2019 John W. Eaton |
1 | 4 |
5 This file is part of Octave. | |
6 | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24441
diff
changeset
|
7 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24441
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
10 (at your option) any later version. |
1 | 11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
15 GNU General Public License for more details. |
1 | 16 |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24441
diff
changeset
|
19 <https://www.gnu.org/licenses/>. |
1 | 20 |
21 */ | |
22 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21698
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
1 | 25 #endif |
26 | |
1343 | 27 #include <cstdarg> |
23448
e1c02e7126a9
avoid calling abort if possible; include cstdlib for declaration if needed
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
28 #include <cstdlib> |
1633 | 29 #include <cstring> |
1343 | 30 |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
31 #include <iomanip> |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
32 #include <iostream> |
5765 | 33 #include <sstream> |
1728 | 34 #include <string> |
35 | |
23137
334119c390b3
move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents:
23127
diff
changeset
|
36 #include "bp-table.h" |
23454
30b6eccd6708
use builtin-defun-decls.h to ensure declarations of interpreter functions
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
37 #include "builtin-defun-decls.h" |
1352 | 38 #include "defun.h" |
1 | 39 #include "error.h" |
3707 | 40 #include "input.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
41 #include "interpreter-private.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
42 #include "interpreter.h" |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
43 #include "oct-map.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
21990
diff
changeset
|
44 #include "octave.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
45 #include "ov-usr-fcn.h" |
2370 | 46 #include "ov.h" |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
47 #include "ovl.h" |
1742 | 48 #include "pager.h" |
18742
bd334b6af257
Enter true debug mode after debug_on_(warning|error) (bug #37574).
Rik <rik@octave.org>
parents:
18222
diff
changeset
|
49 #include "pt-eval.h" |
3707 | 50 #include "unwind-prot.h" |
1352 | 51 #include "utils.h" |
2370 | 52 #include "variables.h" |
1 | 53 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
54 static void verror (bool save_last_error, std::ostream& os, const char *name, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
55 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
|
56 bool with_cfn = false) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
57 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
58 octave::error_system& es = octave::__get_error_system__ ("verror"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
59 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
60 es.verror (save_last_error, os, name, id, fmt, args, with_cfn); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
61 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
62 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
63 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
64 vpr_where (std::ostream& os, const char *fmt, va_list args) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
65 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
66 if (fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
67 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
68 if (*fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
69 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
70 size_t len = strlen (fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
71 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
72 if (len > 0) |
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 if (fmt[len - 1] == '\n') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
75 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
76 if (len > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
77 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
78 std::string tmp_fmt (fmt, len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
79 verror (false, os, nullptr, "", tmp_fmt.c_str (), args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
80 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
81 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
82 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
83 verror (false, os, nullptr, "", fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
84 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
85 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
86 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
87 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
88 panic ("vpr_where: invalid format"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
89 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
90 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
91 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
92 pr_where_internal (std::ostream& os, const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
93 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
94 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
95 va_start (args, fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
96 vpr_where (os, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
97 va_end (args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
98 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
99 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
100 struct |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
101 error_stack_frame |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
102 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
103 std::string name; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
104 int line; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
105 int column; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
106 }; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
107 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
108 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
109 pr_where (std::ostream& os, const char *who, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
110 const std::list<error_stack_frame>& frames) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
111 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
112 size_t nframes = frames.size (); |
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 if (nframes > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
115 pr_where_internal (os, "%s: called from\n", who); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
116 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
117 for (const auto& frm : frames) |
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 std::string fcn_name = frm.name; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
120 int line = frm.line; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
121 int column = frm.column; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
122 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
123 if (line > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
124 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
125 if (column > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
126 pr_where_internal (os, " %s at line %d column %d\n", |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
127 fcn_name.c_str (), line, column); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
128 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
129 pr_where_internal (os, " %s at line %d\n", |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
130 fcn_name.c_str (), line); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
131 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
132 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
133 pr_where_internal (os, " %s\n", fcn_name.c_str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
134 } |
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
137 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
138 pr_where (std::ostream& os, const char *who) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
139 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
140 octave::tree_evaluator& tw = octave::__get_evaluator__ ("pr_where"); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
141 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
142 std::list<octave::stack_frame *> call_stack_frames = tw.backtrace_frames (); |
27161
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 // Print the error message only if it is different from the previous one; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
145 // Makes the output more concise and readable. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
146 call_stack_frames.unique (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
147 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
148 std::list<error_stack_frame> frames; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
149 for (const auto *frm : call_stack_frames) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
150 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
151 error_stack_frame frame; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
152 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
153 frame.name = frm->fcn_name (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
154 frame.line = frm->line (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
155 frame.column = frm->column (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
156 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
157 frames.push_back (frame); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
158 } |
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 pr_where (os, who, frames); |
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 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
164 maybe_enter_debugger (octave::execution_exception& e, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
165 bool show_stack_trace = false) |
4318 | 166 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
167 octave::error_system& es |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
168 = octave::__get_error_system__ ("maybe_enter_debugger"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
169 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
170 es.maybe_enter_debugger (e, show_stack_trace); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
171 } |
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 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
174 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
175 vusage (octave::execution_exception& e, const char *id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
176 const char *fmt, va_list args) |
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 verror (true, std::cerr, "usage", id, fmt, args); |
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 maybe_enter_debugger (e); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
181 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
182 throw e; |
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 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
186 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
187 error_1 (octave::execution_exception& e, std::ostream& os, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
188 const char *name, const char *id, const char *fmt, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
189 va_list args, bool with_cfn = false) |
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 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
|
192 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
193 es.error_1 (e, os, name, id, fmt, args, with_cfn); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
194 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
195 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
196 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
197 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
198 error_1 (std::ostream& os, const char *name, const char *id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
199 const char *fmt, va_list args, bool with_cfn = false) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
200 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
201 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
|
202 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
203 es.error_1 (os, name, id, fmt, args, with_cfn); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
204 } |
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 static int |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
207 check_state (const std::string& state) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
208 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
209 // -1: not found |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
210 // 0: found, "off" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
211 // 1: found, "on" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
212 // 2: found, "error" |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
213 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
214 if (state == "off") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
215 return 0; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
216 else if (state == "on") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
217 return 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
218 else if (state == "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
219 return 2; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
220 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
221 return -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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
224 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
225 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
|
226 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
227 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
|
228 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
229 es.vwarning (id, fmt, args); |
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 static std::list<error_stack_frame> |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
233 make_stack_frame_list (const octave_map& stack) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
234 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
235 std::list<error_stack_frame> frames; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
236 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
237 Cell name = stack.contents ("name"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
238 Cell line = stack.contents ("line"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
239 Cell column; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
240 bool have_column = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
241 if (stack.contains ("column")) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
242 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
243 have_column = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
244 column = stack.contents ("column"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
245 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
246 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
247 octave_idx_type nel = name.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
248 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
249 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
|
250 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
251 error_stack_frame frame; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
252 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
253 frame.name = name(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
254 frame.line = line(i).int_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
255 frame.column = (have_column ? column(i).int_value () : -1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
256 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
257 frames.push_back (frame); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
258 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
259 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
260 return frames; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
261 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
262 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
263 static void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
264 defun_usage_message (const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
265 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
266 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
267 va_start (args, fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
268 error_1 (octave_stdout, nullptr, "", fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
269 va_end (args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
270 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
271 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
272 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
|
273 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
274 static std::string |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
275 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
|
276 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
|
277 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
278 std::string retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
279 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
280 std::string tmpstr; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
281 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
282 if (args.length () > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
283 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
284 octave_value arg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
285 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
286 if (have_fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
287 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
288 octave_value_list tmp = Fsprintf (args, 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
289 arg = tmp(0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
290 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
291 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
292 arg = args(0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
293 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
294 if (arg.is_defined ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
295 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
296 if (arg.isempty ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
297 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
298 else if (arg.is_string ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
299 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
300 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
|
301 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
|
302 // to valid memory. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
303 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
304 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
305 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
306 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
307 // Ugh. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
308 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
309 size_t len = strlen (msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
310 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
311 if (len > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
312 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
313 if (msg[len - 1] == '\n') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
314 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
315 if (len > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
316 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
317 std::string tmp_msg (msg, len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
318 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
|
319 retval = tmp_msg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
320 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
321 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
322 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
323 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
324 f (id, "%s", msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
325 retval = msg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
326 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
327 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
328 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
329 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
330 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
331 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
332 // 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
|
333 // 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
|
334 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
335 static bool |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
336 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
|
337 const octave_value_list& args, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
338 octave_value_list& nargs, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
339 std::string& id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
340 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
341 nargs = args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
342 id = ""; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
343 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
344 int nargin = args.length (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
345 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
346 bool have_fmt = nargin > 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
347 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
348 if (nargin > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
349 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
350 std::string arg1 = args(0).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
351 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
352 // 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
|
353 // 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
|
354 // (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
|
355 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
356 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
|
357 && arg1.find (':') != std::string::npos |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
358 && arg1[0] != ':' |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
359 && arg1.back () != ':') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
360 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
361 if (nargin > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
362 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
363 id = arg1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
364 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
365 nargs.resize (nargin-1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
366 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
367 for (int i = 1; i < nargin; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
368 nargs(i-1) = args(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
369 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
370 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
371 nargs(0) = "call to " + caller |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
372 + " with message identifier '" + arg1 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
373 + "' requires message"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
374 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
375 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
376 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
377 return have_fmt; |
4318 | 378 } |
379 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
380 namespace octave |
5567 | 381 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
382 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
|
383 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
|
384 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
385 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
|
386 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
387 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
|
388 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
|
389 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
390 return initw; |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
391 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
392 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
393 static octave_map |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
394 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
|
395 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
396 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
|
397 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
398 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
|
399 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
400 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
401 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
|
402 : m_interpreter (interp), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
403 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
|
404 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
|
405 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
|
406 m_buffer_error_messages (0), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
407 m_in_try_catch (0), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
408 m_discard_error_messages (false), |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
409 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
|
410 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
|
411 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
421 initialize_default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
422 } |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
423 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
424 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
425 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
|
426 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
427 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
|
428 "debug_on_error"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
429 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
430 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
431 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
432 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
|
433 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
434 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
|
435 "debug_on_caught"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
436 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
437 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
438 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
439 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
|
440 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
441 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
|
442 "debug_on_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
443 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
444 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
445 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
446 error_system::buffer_error_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
|
447 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
448 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
449 return set_internal_variable (m_buffer_error_messages, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
450 "buffer_error_messages"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
451 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
452 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
453 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
454 error_system::in_try_catch (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
|
455 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
456 return set_internal_variable (m_in_try_catch, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
457 "in_try_catch"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
458 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
459 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
460 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
461 error_system::discard_error_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
|
462 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
463 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
464 return set_internal_variable (m_discard_error_messages, args, nargout, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
465 "discard_error_messages"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
466 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
467 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
468 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
469 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
|
470 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
471 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
472 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
|
473 "discard_warning_messages"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
474 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
475 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
476 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
477 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
|
478 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
479 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
|
480 "beep_on_error"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
481 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
482 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
483 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
484 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
|
485 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
486 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
487 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
|
488 "backtrace_on_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
489 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
490 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
491 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
492 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
|
493 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
494 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
|
495 "verbose_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
496 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
497 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
498 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
499 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
|
500 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
501 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
|
502 "quiet_warning"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
503 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
504 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
505 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
506 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
|
507 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
508 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
|
509 "last_error_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
510 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
511 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
512 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
513 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
|
514 int nargout) |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
515 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
516 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
|
517 "last_warning_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
518 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
519 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
520 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
521 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
|
522 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
523 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
|
524 "last_warning_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
525 } |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
526 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
527 octave_value |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
528 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
|
529 { |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
530 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
|
531 "last_error_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
532 } |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
533 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
534 // 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
|
535 // 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
|
536 // warning. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
537 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
538 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
|
539 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
540 int retval = 0; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
541 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
542 int all_state = -1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
543 int id_state = -1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
544 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
545 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
546 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
547 octave_idx_type nel = opts.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
548 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
549 if (nel > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
550 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
551 Cell identifier = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
552 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
553 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
554 bool all_found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
555 bool id_found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
556 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
557 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
|
558 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
559 octave_value ov = identifier(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
560 std::string ovs = ov.string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
561 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
562 if (! all_found && ovs == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
563 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
564 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
|
565 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
566 if (all_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
567 all_found = true; |
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
570 if (! id_found && ovs == id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
571 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
572 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
|
573 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
574 if (id_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
575 id_found = true; |
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
578 if (all_found && id_found) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
579 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
580 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
581 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
582 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
583 // 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
|
584 if (all_state == -1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
585 all_state = 1; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
586 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
587 if (all_state == 0) |
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 if (id_state >= 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
590 retval = id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
591 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
592 else if (all_state == 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
593 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
594 if (id_state == 0 || id_state == 2) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
595 retval = id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
596 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
597 retval = all_state; |
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 else if (all_state == 2) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
600 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
601 if (id_state == 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
602 retval= id_state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
603 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
604 retval = all_state; |
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
607 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
608 } |
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 void error_system::verror (bool save_last_error, std::ostream& os, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
611 const char *name, const char *id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
612 const char *fmt, va_list args, bool with_cfn) |
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 if (discard_error_messages () && ! debug_on_caught ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
615 return; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
616 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
617 if (! buffer_error_messages () || debug_on_caught ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
618 flush_stdout (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
619 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
620 // FIXME: we really want to capture the message before it has all the |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
621 // formatting goop attached to it. We probably also want just the |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
622 // message, not the traceback information. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
623 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
624 std::ostringstream output_buf; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
625 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
626 vformat (output_buf, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
627 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
628 std::string base_msg = output_buf.str (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
629 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
630 bool to_beep_or_not_to_beep_p = beep_on_error (); |
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 std::string msg_string; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
633 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
634 if (to_beep_or_not_to_beep_p) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
635 msg_string = "\a"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
636 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
637 if (name) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
638 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
639 if (in_try_catch () && ! strcmp (name, "error")) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
640 msg_string += "caught error: "; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
641 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
642 msg_string += std::string (name) + ": "; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
643 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
644 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
645 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
|
646 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
647 // If with_fcn is specified, we'll attempt to prefix the message with the name |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
648 // of the current executing function. But we'll do so only if: |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
649 // 1. the name is not empty (anonymous function) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
650 // 2. it is not already there (including the following colon) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
651 if (with_cfn) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
652 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
653 std::string cfn = tw.current_function_name (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
654 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
655 if (! cfn.empty ()) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
656 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
657 cfn += ':'; |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
658 if (cfn.length () > base_msg.length () |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
659 || base_msg.compare (0, cfn.length (), cfn) != 0) |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
660 msg_string += cfn + ' '; |
27161
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 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
663 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
664 msg_string += base_msg + '\n'; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
665 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
666 if (save_last_error) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
667 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
668 // This is the first error in a possible series. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
669 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
670 last_error_id (id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
671 last_error_message (base_msg); |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
672 last_error_stack (tw.in_user_code () |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
673 ? tw.backtrace () : tw.empty_backtrace ()); |
27161
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
676 if (! buffer_error_messages () || debug_on_caught ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
677 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
678 octave_diary << msg_string; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
679 os << msg_string; |
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 void error_system::maybe_enter_debugger (execution_exception& e, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
684 bool show_stack_trace) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
685 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
686 tree_evaluator& tw = m_interpreter.get_evaluator (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
687 bp_table& bptab = tw.get_bp_table (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
688 |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27286
diff
changeset
|
689 if ((m_interpreter.interactive () || application::forced_interactive ()) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
690 && ((debug_on_error () |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
691 && bptab.debug_on_err (last_error_id ())) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
692 || (debug_on_caught () |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
693 && bptab.debug_on_caught (last_error_id ()))) |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
694 && tw.in_user_code ()) |
27161
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 if (show_stack_trace) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
697 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
698 std::string stack_trace = e.info (); |
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 if (! stack_trace.empty ()) |
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 std::cerr << stack_trace; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
703 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
704 e.set_stack_trace (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
705 } |
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 tw.enter_debugger (); |
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 } |
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 void error_system::vwarning (const char *name, const char *id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
713 const char *fmt, va_list args) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
714 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
715 if (discard_warning_messages ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
716 return; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
717 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
718 flush_stdout (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
719 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
720 std::ostringstream output_buf; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
721 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
722 vformat (output_buf, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
723 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
724 // FIXME: we really want to capture the message before it has all the |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
725 // formatting goop attached to it. We probably also want just the |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
726 // message, not the traceback information. |
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 std::string base_msg = output_buf.str (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
729 std::string msg_string; |
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 if (name) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
732 msg_string = std::string (name) + ": "; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
733 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
734 msg_string += base_msg + '\n'; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
735 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
736 last_warning_id (id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
737 last_warning_message (base_msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
738 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
739 if (! quiet_warning ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
740 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
741 octave_diary << msg_string; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
742 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
743 std::cerr << msg_string; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
744 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
745 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
746 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
747 void error_system::error_1 (execution_exception& e, std::ostream& os, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
748 const char *name, const char *id, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
749 const char *fmt, va_list args, bool with_cfn) |
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 bool show_stack_trace = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
752 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
753 if (fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
754 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
755 if (*fmt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
756 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
757 size_t len = strlen (fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
758 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
759 if (len > 0) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
760 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
761 if (fmt[len - 1] == '\n') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
762 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
763 if (len > 1) |
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 std::string tmp_fmt (fmt, len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
766 verror (true, os, name, id, tmp_fmt.c_str (), |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
767 args, with_cfn); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
768 } |
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 // If format ends with newline, suppress stack trace. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
771 e.set_stack_trace (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
772 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
773 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
774 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
775 verror (true, os, name, id, fmt, args, with_cfn); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
776 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
777 tree_evaluator& tw = m_interpreter.get_evaluator (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
778 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
779 if (tw.in_user_code () && ! discard_error_messages ()) |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
780 show_stack_trace = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
781 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
782 } |
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 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
785 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
786 panic ("error_1: invalid format"); |
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 maybe_enter_debugger (e, show_stack_trace); |
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 throw e; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
791 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
792 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
793 void error_system::error_1 (std::ostream& os, const char *name, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
794 const char *id, const char *fmt, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
795 va_list args, bool with_cfn = false) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
796 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
797 execution_exception e = make_execution_exception ("error"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
798 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
799 error_1 (e, os, name, id, fmt, args, with_cfn); |
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 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
|
803 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
804 int warn_opt = warning_enabled (id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
805 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
806 if (warn_opt == 2) |
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 // Handle this warning as an error. |
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 error_1 (std::cerr, "error", id, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
811 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
812 else if (warn_opt == 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
813 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
814 bool fmt_suppresses_backtrace = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
815 size_t fmt_len = (fmt ? strlen (fmt) : 0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
816 fmt_suppresses_backtrace = (fmt_len > 0 && fmt[fmt_len-1] == '\n'); |
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 if (fmt_suppresses_backtrace && fmt_len > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
819 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
820 // Strip newline before issuing warning |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
821 std::string tmp_fmt (fmt, fmt_len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
822 vwarning ("warning", id, tmp_fmt.c_str (), args); |
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 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
825 vwarning ("warning", id, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
826 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
827 tree_evaluator& tw = m_interpreter.get_evaluator (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
828 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
829 bool in_user_code = tw.in_user_code (); |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
830 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
831 if (! fmt_suppresses_backtrace && in_user_code |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
832 && backtrace_on_warning () |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
833 && ! discard_warning_messages ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
834 pr_where (std::cerr, "warning"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
835 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
836 bp_table& bptab = tw.get_bp_table (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
837 |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27286
diff
changeset
|
838 if ((m_interpreter.interactive () |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
839 || application::forced_interactive ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
840 && debug_on_warning () && in_user_code && bptab.debug_on_warn (id)) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
841 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
842 unwind_protect frame; |
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 frame.protect_var (m_debug_on_warning); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
845 m_debug_on_warning = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
846 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
847 tw.enter_debugger (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
848 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
849 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
850 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
851 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
852 void error_system::rethrow_error (const char *id, const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
853 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
854 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
855 va_start (args, fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
856 verror (false, std::cerr, nullptr, id, fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
857 va_end (args); |
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 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
860 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
|
861 const std::string& msg, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
862 const octave_map& stack) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
863 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
864 execution_exception e = make_execution_exception ("error"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
865 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
866 if (! stack.isempty () |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
867 && ! (stack.contains ("file") && stack.contains ("name") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
868 && stack.contains ("line"))) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
869 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
|
870 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
871 last_error_id (id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
872 last_error_message (msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
873 last_error_stack (stack); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
874 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
875 size_t len = msg.length (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
876 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
877 std::string tmp_msg (msg); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
878 if (len > 1 && tmp_msg[len-1] == '\n') |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
879 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
880 tmp_msg.erase (len - 1); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
881 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
882 rethrow_error (id.c_str (), "%s\n", tmp_msg.c_str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
883 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
884 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
885 rethrow_error (id.c_str (), "%s", tmp_msg.c_str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
886 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
887 if (! stack.isempty ()) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
888 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
889 std::ostringstream buf; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
890 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
891 pr_where (buf, "error", make_stack_frame_list (stack)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
892 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
893 e.set_stack_trace (buf.str ()); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
894 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
895 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
896 throw e; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
897 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
898 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
899 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
|
900 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
901 buffer_error_messages (0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
902 discard_error_messages (false); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
903 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
904 verror (false, std::cerr, "panic", "", fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
905 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
906 abort (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
907 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
908 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
909 void error_system::panic (const char *fmt, ...) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
910 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
911 va_list args; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
912 va_start (args, fmt); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
913 vpanic (fmt, args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
914 va_end (args); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
915 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
916 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
917 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
|
918 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
919 octave_scalar_map retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
920 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
921 std::string id = id_arg; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
922 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
923 if (id == "last") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
924 id = last_warning_id (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
925 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
926 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
927 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
928 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
929 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
930 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
931 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
932 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
933 assert (nel != 0); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
934 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
935 bool found = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
936 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
937 std::string val; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
938 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
939 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
|
940 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
941 if (ident(i).string_value () == id) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
942 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
943 val = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
944 found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
945 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
946 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
947 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
948 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
949 if (! found) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
950 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
951 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
|
952 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
953 if (ident(i).string_value () == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
954 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
955 val = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
956 found = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
957 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
958 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
959 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
960 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
961 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
962 // 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
|
963 // 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
|
964 // state for "all". |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
965 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
966 assert (found); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
967 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
968 retval.assign ("identifier", id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
969 retval.assign ("state", val); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
970 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
971 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
972 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
973 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
974 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
|
975 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
976 std::string retval = "on"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
977 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
978 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
979 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
980 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
981 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
982 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
983 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
984 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
985 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
|
986 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
987 if (ident(i).string_value () == "all") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
988 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
989 retval = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
990 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
991 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
992 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
993 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
994 return retval; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
995 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
996 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
997 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
|
998 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
999 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1000 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1001 Cell ident = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1002 Cell state = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1003 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1004 octave_idx_type nel = ident.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1005 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1006 std::string all_state = default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1007 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1008 if (all_state == "on") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1009 os << "By default, warnings are enabled."; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1010 else if (all_state == "off") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1011 os << "By default, warnings are disabled."; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1012 else if (all_state == "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1013 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
|
1014 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1015 panic_impossible (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1016 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1017 if (nel > 1) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1018 os << "\n\n"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1019 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1020 // The state for all is always supposed to be first in the list. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1021 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1022 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
|
1023 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1024 std::string tid = ident(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1025 std::string tst = state(i).string_value (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1026 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1027 os << std::setw (7) << tst << " " << tid << "\n"; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1028 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1029 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1030 os << std::endl; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1031 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1032 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1033 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
|
1034 const std::string& ident) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1035 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1036 std::string all_state = default_warning_state (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1037 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1038 if (state != "on" && state != "off" && state != "error") |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1039 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
|
1040 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1041 octave_map opts = warning_options (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1042 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1043 Cell tid = opts.contents ("identifier"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1044 Cell tst = opts.contents ("state"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1045 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1046 octave_idx_type nel = tid.numel (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1047 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1048 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
|
1049 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1050 if (tid(i).string_value () == ident) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1051 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1052 // 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
|
1053 // 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
|
1054 // from the list. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1055 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1056 if (state == all_state && ident != "all") |
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 for (i = i + 1; i < nel; i++) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1059 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1060 tid(i-1) = tid(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1061 tst(i-1) = tst(i); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1062 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1063 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1064 tid.resize (dim_vector (1, nel-1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1065 tst.resize (dim_vector (1, nel-1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1066 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1067 else |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1068 tst(i) = state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1069 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1070 opts.clear (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1071 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1072 opts.assign ("identifier", tid); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1073 opts.assign ("state", tst); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1074 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1075 warning_options (opts); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1076 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1077 return; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1078 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1079 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1080 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1081 // 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
|
1082 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1083 tid.resize (dim_vector (1, nel+1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1084 tst.resize (dim_vector (1, nel+1)); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1085 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1086 tid(nel) = ident; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1087 tst(nel) = state; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1088 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1089 opts.clear (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1090 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1091 opts.assign ("identifier", tid); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1092 opts.assign ("state", tst); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1093 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1094 warning_options (opts); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1095 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1096 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1097 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
|
1098 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1099 set_warning_option ("off", id); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1100 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1101 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1102 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
|
1103 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1104 warning_options (octave::init_warning_options ("on")); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1105 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1106 // 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
|
1107 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1108 disable_warning ("Octave:array-as-logical"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1109 disable_warning ("Octave:array-to-scalar"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1110 disable_warning ("Octave:array-to-vector"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1111 disable_warning ("Octave:imag-to-real"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1112 disable_warning ("Octave:language-extension"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1113 disable_warning ("Octave:missing-semicolon"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1114 disable_warning ("Octave:neg-dim-as-zero"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1115 disable_warning ("Octave:resize-on-range-error"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1116 disable_warning ("Octave:separator-insert"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1117 disable_warning ("Octave:single-quote-string"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1118 disable_warning ("Octave:str-to-num"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1119 disable_warning ("Octave:mixed-string-concat"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1120 disable_warning ("Octave:variable-switch-label"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1121 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1122 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1123 void error_system::interpreter_try (octave::unwind_protect& frame, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1124 try_option opt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1125 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1126 switch (opt) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1127 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1128 case buffer: |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1129 frame.protect_var (m_buffer_error_messages); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1130 m_buffer_error_messages++; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1131 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1132 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1133 case discard: |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1134 frame.protect_var (m_discard_error_messages); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1135 m_discard_error_messages = true; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1136 break; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1137 } |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1138 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1139 frame.protect_var (m_debug_on_error); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1140 m_debug_on_error = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1141 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1142 frame.protect_var (m_debug_on_warning); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1143 m_debug_on_warning = false; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1144 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1145 // 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
|
1146 // caught. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1147 } |
19421
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
1148 } |
8b785ca93de7
don't print stack trace on errors if error_state is -2
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
1149 |
23464
7eb0077e86f0
show stack trace for wrong type arg errors (bug #50894)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
1150 octave::execution_exception |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1151 make_execution_exception (const char *who) |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1152 { |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1153 std::ostringstream buf; |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1154 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1155 pr_where (buf, who); |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1156 |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1157 octave::execution_exception retval; |
20780
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1158 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1159 retval.set_stack_trace (buf.str ()); |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1160 |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1161 return retval; |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1162 } |
92958b1ee100
restore stack traces to error messages
John W. Eaton <jwe@octave.org>
parents:
20777
diff
changeset
|
1163 |
1 | 1164 void |
6338 | 1165 vmessage (const char *name, const char *fmt, va_list args) |
1166 { | |
1167 verror (false, std::cerr, name, "", fmt, args); | |
1168 } | |
1169 | |
1170 void | |
1 | 1171 message (const char *name, const char *fmt, ...) |
1172 { | |
1173 va_list args; | |
1174 va_start (args, fmt); | |
6338 | 1175 vmessage (name, fmt, args); |
1 | 1176 va_end (args); |
1177 } | |
1178 | |
1179 void | |
6338 | 1180 vmessage_with_id (const char *name, const char *id, const char *fmt, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1181 va_list args) |
6338 | 1182 { |
1183 verror (false, std::cerr, name, id, fmt, args); | |
1184 } | |
1185 | |
1186 void | |
5567 | 1187 message_with_id (const char *name, const char *id, const char *fmt, ...) |
1188 { | |
1189 va_list args; | |
1190 va_start (args, fmt); | |
6338 | 1191 vmessage_with_id (name, id, fmt, args); |
5567 | 1192 va_end (args); |
1193 } | |
1194 | |
1195 void | |
6338 | 1196 vusage_with_id (const char *id, const char *fmt, va_list args) |
1197 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1198 octave::execution_exception e = make_execution_exception ("usage"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1199 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1200 vusage (e, id, fmt, args); |
6338 | 1201 } |
1202 | |
1203 void | |
5567 | 1204 usage_with_id (const char *id, const char *fmt, ...) |
1205 { | |
1206 va_list args; | |
1207 va_start (args, fmt); | |
6338 | 1208 vusage_with_id (id, fmt, args); |
1 | 1209 va_end (args); |
1210 } | |
1211 | |
6000 | 1212 void |
6338 | 1213 verror (const char *fmt, va_list args) |
1214 { | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1215 error_1 (std::cerr, "error", "", fmt, args); |
6338 | 1216 } |
1217 | |
1218 void | |
6000 | 1219 error (const char *fmt, ...) |
1220 { | |
1221 va_list args; | |
1222 va_start (args, fmt); | |
6338 | 1223 verror (fmt, args); |
6000 | 1224 va_end (args); |
1225 } | |
1226 | |
1227 void | |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1228 verror (octave::execution_exception& e, const char *fmt, va_list args) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1229 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1230 error_1 (e, std::cerr, "error", "", fmt, args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1231 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1232 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1233 void |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
1234 error (octave::execution_exception& e, const char *fmt, ...) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1235 { |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1236 va_list args; |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1237 va_start (args, fmt); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1238 verror (e, fmt, args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1239 va_end (args); |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1240 } |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1241 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20711
diff
changeset
|
1242 void |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1243 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
|
1244 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1245 error_1 (std::cerr, "error", "", fmt, args, true); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1246 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1247 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1248 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1249 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
|
1250 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1251 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1252 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1253 verror_with_cfn (fmt, args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1254 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1255 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1256 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1257 void |
6338 | 1258 verror_with_id (const char *id, const char *fmt, va_list args) |
1259 { | |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1260 error_1 (std::cerr, "error", id, fmt, args); |
6338 | 1261 } |
1262 | |
1263 void | |
6000 | 1264 error_with_id (const char *id, const char *fmt, ...) |
1265 { | |
1266 va_list args; | |
1267 va_start (args, fmt); | |
6338 | 1268 verror_with_id (id, fmt, args); |
6000 | 1269 va_end (args); |
1270 } | |
1271 | |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1272 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1273 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
|
1274 { |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
1275 error_1 (std::cerr, "error", id, fmt, args, true); |
9753
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1276 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1277 |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1278 void |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1279 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
|
1280 { |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1281 va_list args; |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1282 va_start (args, fmt); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1283 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
|
1284 va_end (args); |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1285 } |
892e2aa7bc75
improve error messages by auto-prepending current function name
Jaroslav Hajek <highegg@gmail.com>
parents:
9675
diff
changeset
|
1286 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1287 int warning_enabled (const std::string& id) |
1 | 1288 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1289 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
|
1290 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1291 return es.warning_enabled (id); |
1 | 1292 } |
1293 | |
1294 void | |
6338 | 1295 vwarning (const char *fmt, va_list args) |
1296 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1297 vwarning ("", fmt, args); |
6338 | 1298 } |
1299 | |
1300 void | |
5567 | 1301 warning (const char *fmt, ...) |
1302 { | |
1303 va_list args; | |
1304 va_start (args, fmt); | |
6338 | 1305 vwarning (fmt, args); |
5567 | 1306 va_end (args); |
1307 } | |
1308 | |
1309 void | |
6338 | 1310 vwarning_with_id (const char *id, const char *fmt, va_list args) |
1311 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1312 vwarning (id, fmt, args); |
6338 | 1313 } |
1314 | |
1315 void | |
5567 | 1316 warning_with_id (const char *id, const char *fmt, ...) |
1317 { | |
1318 va_list args; | |
1319 va_start (args, fmt); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1320 vwarning (id, fmt, args); |
5567 | 1321 va_end (args); |
1322 } | |
1323 | |
1324 void | |
6338 | 1325 vparse_error (const char *fmt, va_list args) |
1326 { | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
1327 error_1 (std::cerr, nullptr, "", fmt, args); |
6338 | 1328 } |
1329 | |
1330 void | |
1005 | 1331 parse_error (const char *fmt, ...) |
1332 { | |
1333 va_list args; | |
1334 va_start (args, fmt); | |
6338 | 1335 vparse_error (fmt, args); |
5567 | 1336 va_end (args); |
1337 } | |
1338 | |
1339 void | |
6338 | 1340 vparse_error_with_id (const char *id, const char *fmt, va_list args) |
1341 { | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
1342 error_1 (std::cerr, nullptr, id, fmt, args); |
6338 | 1343 } |
1344 | |
1345 void | |
5567 | 1346 parse_error_with_id (const char *id, const char *fmt, ...) |
1347 { | |
1348 va_list args; | |
1349 va_start (args, fmt); | |
6338 | 1350 vparse_error_with_id (id, fmt, args); |
1 | 1351 va_end (args); |
1352 } | |
1353 | |
189 | 1354 void |
6361 | 1355 rethrow_error (const char *id, const char *fmt, ...) |
1356 { | |
1357 va_list args; | |
1358 va_start (args, fmt); | |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
1359 error_1 (std::cerr, nullptr, id, fmt, args); |
6361 | 1360 va_end (args); |
1361 } | |
1362 | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1363 OCTAVE_NORETURN |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1364 void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1365 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
|
1366 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1367 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
|
1368 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1369 es.vpanic (fmt, args); |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1370 } |
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1371 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1372 OCTAVE_NORETURN |
6361 | 1373 void |
1 | 1374 panic (const char *fmt, ...) |
1375 { | |
1376 va_list args; | |
1377 va_start (args, fmt); | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1378 vpanic (fmt, args); |
4732 | 1379 va_end (args); |
1380 } | |
1381 | |
1382 void | |
1383 defun_usage_message (const std::string& msg) | |
1384 { | |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1385 defun_usage_message ("%s", msg.c_str ()); |
528 | 1386 } |
1387 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1388 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
|
1389 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
|
1390 @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
|
1391 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
|
1392 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1393 @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
|
1394 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
|
1395 @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
|
1396 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
|
1397 @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
|
1398 @end deftypefn */) |
6361 | 1399 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20817
diff
changeset
|
1400 if (args.length () != 1) |
6959 | 1401 print_usage (); |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1402 |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1403 const octave_scalar_map err = args(0).scalar_map_value (); |
6361 | 1404 |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1405 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
|
1406 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
|
1407 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1408 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
|
1409 std::string id = err.contents ("identifier").string_value (); |
6483 | 1410 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1411 octave_map err_stack = octave::init_error_stack (interp); |
6483 | 1412 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1413 if (err.contains ("stack")) |
22808
1d3d0321bc5d
preserve lasterror info on rethrow (bug #49642)
John W. Eaton <jwe@octave.org>
parents:
22489
diff
changeset
|
1414 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
|
1415 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1416 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
|
1417 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1418 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
|
1419 |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21040
diff
changeset
|
1420 return ovl (); |
6361 | 1421 } |
1422 | |
1957 | 1423 DEFUN (error, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1424 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1425 @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
|
1426 @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
|
1427 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
|
1428 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1429 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
|
1430 @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
|
1431 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
|
1432 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
|
1433 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
|
1434 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1435 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
|
1436 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
|
1437 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
|
1438 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1439 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
|
1440 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
|
1441 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
|
1442 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1443 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1444 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1445 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
|
1446 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
|
1447 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
|
1448 @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
|
1449 @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
|
1450 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1451 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1452 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
|
1453 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
|
1454 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1455 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1456 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1457 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1458 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
|
1459 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
|
1460 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
|
1461 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
|
1462 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
|
1463 @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
|
1464 @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
|
1465 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1466 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
|
1467 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
|
1468 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
|
1469 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
|
1470 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
|
1471 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1472 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1473 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1474 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
|
1475 f () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1476 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
|
1477 @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
|
1478 @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
|
1479 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1480 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
|
1481 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
|
1482 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
|
1483 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
|
1484 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1485 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1486 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1487 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
|
1488 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
|
1489 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
|
1490 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
|
1491 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
|
1492 @dots{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1493 endif |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1494 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
|
1495 @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
|
1496 @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
|
1497 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1498 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1499 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
|
1500 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1501 Implementation Note: For compatibility with @sc{matlab}, escape |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1502 sequences in @var{template} (e.g., @qcode{"@xbackslashchar{}n"} => |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1503 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
|
1504 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
|
1505 disable escape sequence expansion use a second backslash before the sequence |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1506 (e.g., @qcode{"@xbackslashchar{}@xbackslashchar{}n"}) or use the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1507 @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
|
1508 @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
|
1509 @end deftypefn */) |
897 | 1510 { |
7252 | 1511 |
1512 int nargin = args.length (); | |
1513 | |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1514 if (nargin == 0) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1515 print_usage (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1516 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1517 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1518 |
7252 | 1519 octave_value_list nargs = args; |
1520 | |
1521 std::string id; | |
1522 | |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1523 bool have_fmt = false; |
5567 | 1524 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1525 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
|
1526 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1527 // 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
|
1528 if (args(0).isempty ()) |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1529 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
|
1530 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1531 octave_scalar_map m = args(0).scalar_map_value (); |
7252 | 1532 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1533 // 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
|
1534 if (m.nfields () == 0) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1535 return retval; |
7252 | 1536 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1537 if (m.contains ("message")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1538 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1539 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
|
1540 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1541 if (c.is_string ()) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1542 nargs(0) = c.string_value (); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1543 } |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1544 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1545 if (m.contains ("identifier")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1546 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1547 octave_value c = m.getfield ("identifier"); |
7252 | 1548 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1549 if (c.is_string ()) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1550 id = c.string_value (); |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1551 } |
9675
ef45d191d833
error: improve compatibility for calls with no arguments or empty format
John W. Eaton <jwe@octave.org>
parents:
9588
diff
changeset
|
1552 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1553 // FIXME: also need to handle "stack" field in error structure, |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1554 // but that will require some more significant surgery on |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1555 // handle_message, error_with_id, etc. |
7252 | 1556 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1557 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1558 have_fmt = maybe_extract_message_id ("error", args, nargs, id); |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1559 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1560 handle_message (error_with_id, id.c_str (), "unspecified error", |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
1561 nargs, have_fmt); |
7252 | 1562 |
3934 | 1563 return retval; |
1489 | 1564 } |
897 | 1565 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1566 DEFMETHOD (warning, interp, args, nargout, |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1567 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
|
1568 @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
|
1569 @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
|
1570 @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
|
1571 @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
|
1572 @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
|
1573 @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
|
1574 @deftypefnx {} {} warning (@var{state}, @var{id}, "local") |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1575 @deftypefnx {} {} warning (@var{warning_struct}) |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1576 @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
|
1577 @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
|
1578 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1579 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
|
1580 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1581 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
|
1582 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
|
1583 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
|
1584 (@pxref{Formatted Output}) and prefixed by the character string |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1585 @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
|
1586 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
|
1587 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
|
1588 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1589 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1590 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1591 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
|
1592 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1593 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1594 |
26859
b4a9888bb3c9
doc: document the newline character in warning messages (bug #49158)
Mike Miller <mtmiller@octave.org>
parents:
26617
diff
changeset
|
1595 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
|
1596 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
|
1597 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
|
1598 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
|
1599 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
|
1600 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1601 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
|
1602 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
|
1603 form @qcode{"NAMESPACE:WARNING-NAME"}. Octave's own warnings use the |
24441 | 1604 @qcode{"Octave"} namespace (@pxref{XREFwarning_ids,,warning_ids}). For |
1605 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
|
1606 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1607 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
1608 @group |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1609 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
|
1610 "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
|
1611 @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
|
1612 @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
|
1613 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1614 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
|
1615 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
|
1616 @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
|
1617 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
|
1618 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1619 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
|
1620 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
|
1621 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
|
1622 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1623 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1624 @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
|
1625 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
|
1626 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
|
1627 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1628 @item @qcode{"error"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1629 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
|
1630 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
|
1631 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1632 @item @qcode{"query"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1633 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
|
1634 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1635 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1636 A structure or structure array @var{warning_struct}, with fields |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1637 @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
|
1638 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
|
1639 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
|
1640 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1641 @example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1642 @group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1643 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1644 ## 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
|
1645 [~, id] = lastwarn (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1646 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
|
1647 loglog (-1:10); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1648 ## 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
|
1649 warning (warnstate); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1650 @end group |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1651 @end example |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1652 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1653 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
|
1654 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
|
1655 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
|
1656 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
|
1657 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
|
1658 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
|
1659 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1660 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
|
1661 @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
|
1662 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
|
1663 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1664 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
|
1665 modes @var{mode}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1666 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1667 @table @asis |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1668 @item @qcode{"backtrace"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1669 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
|
1670 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1671 @item @qcode{"verbose"}: |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1672 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
|
1673 @end table |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1674 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1675 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
|
1676 @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
|
1677 |
25215
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1678 Implementation Note: For compatibility with @sc{matlab}, escape sequences in |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1679 @var{template} (e.g., @qcode{"@xbackslashchar{}n"} => newline) are processed |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1680 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
|
1681 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
|
1682 expansion use a second backslash before the sequence (e.g., |
7ca5f8c70879
doc: Update docstring for warning().
Rik <rik@octave.org>
parents:
25164
diff
changeset
|
1683 @qcode{"@xbackslashchar{}@xbackslashchar{}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
|
1684 @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
|
1685 @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
|
1686 @end deftypefn */) |
1489 | 1687 { |
5567 | 1688 octave_value retval; |
3934 | 1689 |
5567 | 1690 int nargin = args.length (); |
3935 | 1691 bool done = false; |
3934 | 1692 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1693 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
|
1694 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1695 if (nargin > 0 && args.all_strings_p ()) |
3935 | 1696 { |
1697 string_vector argv = args.make_argv ("warning"); | |
1698 | |
20996 | 1699 std::string arg1 = argv[1]; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1700 std::string arg2 = "all"; |
5567 | 1701 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1702 if (nargin >= 2) |
20996 | 1703 arg2 = argv[2]; |
5567 | 1704 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1705 if (arg1 == "on" || arg1 == "off" || arg1 == "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1706 { |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1707 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1708 octave_map old_warning_options; |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1709 if (arg2 == "all") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1710 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
|
1711 else |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1712 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
|
1713 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1714 if (nargin == 3 && argv[3] == "local" && ! interp.at_top_level ()) |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1715 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1716 octave_scalar_map val = es.warning_query (arg2); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1717 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1718 octave_value curr_state = val.contents ("state"); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1719 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1720 // FIXME: this might be better with a dictionary object. |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1721 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1722 octave::tree_evaluator& tw = interp.get_evaluator (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1723 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1724 octave_value curr_warning_states |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1725 = tw.get_auto_fcn_var (octave::stack_frame::SAVED_WARNING_STATES); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1726 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1727 octave_map m; |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1728 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1729 if (curr_warning_states.is_defined ()) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1730 m = curr_warning_states.map_value (); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1731 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1732 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1733 string_vector fields (2); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1734 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1735 fields(0) = "identifier"; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1736 fields(1) = "state"; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1737 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1738 m = octave_map (dim_vector (0, 1), fields); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1739 } |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1740 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1741 Cell ids = m.contents ("identifier"); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1742 Cell states = m.contents ("state"); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1743 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1744 octave_idx_type nel = states.numel (); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1745 bool found = false; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1746 octave_idx_type i; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1747 for (i = 0; i < nel; i++) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1748 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1749 std::string id = ids(i).string_value (); |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1750 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1751 if (id == arg2) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1752 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1753 states(i) = curr_state; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1754 found = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1755 break; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1756 } |
15427
6823ad7a25b1
implement local option for warnings
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
1757 } |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1758 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1759 if (! found) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1760 { |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1761 m.resize (dim_vector (nel+1, 1)); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1762 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1763 ids.resize (dim_vector (nel+1, 1)); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1764 states.resize (dim_vector (nel+1, 1)); |
3934 | 1765 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1766 ids(nel) = arg2; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1767 states(nel) = curr_state; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1768 } |
7202 | 1769 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1770 m.contents ("identifier") = ids; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1771 m.contents ("state") = states; |
7202 | 1772 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26619
diff
changeset
|
1773 tw.set_auto_fcn_var (octave::stack_frame::SAVED_WARNING_STATES, m); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1774 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1775 // Now ignore the "local" argument and continue to |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1776 // handle the current setting. |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1777 nargin--; |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1778 } |
7202 | 1779 |
21000 | 1780 if (nargin >= 2 && arg2 == "all") |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1781 { |
21000 | 1782 // If "all" is explicitly given as ID. |
7202 | 1783 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1784 octave_map tmp; |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1785 int is_error = (arg1 == "error"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1786 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1787 Cell id (1, 1 + 2*is_error); |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1788 Cell st (1, 1 + 2*is_error); |
7206 | 1789 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1790 id(0) = arg2; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1791 st(0) = arg1; |
7206 | 1792 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1793 // Since internal Octave functions are not compatible, |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1794 // and "all"=="error" causes any "on" to throw an error, |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1795 // turning all warnings into errors should disable |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1796 // Octave:language-extension. |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1797 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1798 if (is_error) |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1799 { |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1800 id(1) = "Octave:language-extension"; |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1801 st(1) = "off"; |
7202 | 1802 |
22223
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1803 id(2) = "Octave:single-quote-string"; |
cf18d6e791a1
Prevent Octave:language-extension from becoming an error (bug #44336).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22196
diff
changeset
|
1804 st(2) = "off"; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1805 } |
5567 | 1806 |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1807 tmp.assign ("identifier", id); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1808 tmp.assign ("state", st); |
5582 | 1809 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1810 es.warning_options (tmp); |
5567 | 1811 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1812 done = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1813 } |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1814 else if (arg2 == "backtrace") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1815 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1816 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1817 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1818 es.backtrace_on_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1819 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1820 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1821 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1822 else if (arg2 == "debug") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1823 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1824 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1825 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1826 es.debug_on_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1827 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1828 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1829 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1830 else if (arg2 == "verbose") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1831 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1832 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1833 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1834 es.verbose_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1835 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1836 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1837 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1838 else if (arg2 == "quiet") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1839 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1840 if (arg1 != "error") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1841 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1842 es.quiet_warning (arg1 == "on"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1843 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1844 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1845 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1846 else |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1847 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1848 if (arg2 == "last") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1849 arg2 = es.last_warning_id (); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1850 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1851 es.set_warning_option (arg1, arg2); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1852 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1853 done = true; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1854 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1855 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1856 if (done && nargout > 0) |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1857 retval = old_warning_options; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1858 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1859 else if (arg1 == "query") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1860 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1861 if (arg2 == "all") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1862 retval = es.warning_options (); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1863 else if (arg2 == "backtrace" || arg2 == "debug" |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1864 || arg2 == "verbose" || arg2 == "quiet") |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1865 { |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1866 octave_scalar_map tmp; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1867 tmp.assign ("identifier", arg2); |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1868 if (arg2 == "backtrace") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1869 tmp.assign ("state", es.backtrace_on_warning () ? "on" : "off"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1870 else if (arg2 == "debug") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1871 tmp.assign ("state", es.debug_on_warning () ? "on" : "off"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1872 else if (arg2 == "verbose") |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1873 tmp.assign ("state", es.verbose_warning () ? "on" : "off"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1874 else |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1875 tmp.assign ("state", es.quiet_warning () ? "on" : "off"); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1876 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1877 retval = tmp; |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1878 } |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1879 else |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1880 retval = es.warning_query (arg2); |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1881 |
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1882 done = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1883 } |
3934 | 1884 } |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1885 else if (nargin == 0) |
5567 | 1886 { |
19439
93fbdbcb3349
fix handling of options struct passed to warning function (bug #36393)
John W. Eaton <jwe@octave.org>
parents:
19421
diff
changeset
|
1887 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
|
1888 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
|
1889 else |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1890 es.display_warning_options (octave_stdout); |
3934 | 1891 |
5567 | 1892 done = true; |
1893 } | |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1894 else if (nargin == 1) |
5567 | 1895 { |
1896 octave_value arg = args(0); | |
1897 | |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1898 octave_map old_warning_options; |
5567 | 1899 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1900 if (arg.isstruct ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1901 { |
11058
3329616444f0
replace Octave_map in debug.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
11029
diff
changeset
|
1902 octave_map m = arg.map_value (); |
5567 | 1903 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1904 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
|
1905 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
|
1906 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1907 // 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
|
1908 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1909 Cell ident = m.contents ("identifier"); |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1910 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
|
1911 |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1912 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
|
1913 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1914 // Prepare output structure |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1915 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
|
1916 Cell oldstate (state); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1917 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1918 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
|
1919 { |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1920 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
|
1921 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
|
1922 } |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1923 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
|
1924 |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1925 // Set new values |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1926 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
|
1927 { |
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1928 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
|
1929 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
|
1930 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
1931 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
|
1932 } |
5567 | 1933 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1934 done = true; |
5567 | 1935 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1936 if (nargout > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1937 retval = old_warning_options; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1938 } |
5567 | 1939 } |
1940 | |
20678
4b00afb5e9c3
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20666
diff
changeset
|
1941 if (! done) |
3935 | 1942 { |
5567 | 1943 octave_value_list nargs = args; |
1944 | |
1945 std::string id; | |
1946 | |
14558
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1947 bool have_fmt = maybe_extract_message_id ("warning", args, nargs, id); |
5567 | 1948 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
1949 std::string prev_msg = es.last_warning_message (); |
3935 | 1950 |
5567 | 1951 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
|
1952 "unspecified warning", nargs, |
0c9c85e702ca
better compatibility for error/warning message IDs and format specifiers
John W. Eaton <jwe@octave.org>
parents:
14361
diff
changeset
|
1953 have_fmt); |
3935 | 1954 |
1955 if (nargout > 0) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1956 retval = prev_msg; |
3935 | 1957 } |
1958 | |
3934 | 1959 return retval; |
1960 } | |
1961 | |
20963
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1962 /* |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
1963 %!test <*45753> |
20963
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1964 %! warning ("error"); |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1965 %! assert (! isempty (help ("warning"))); |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1966 */ |
6ed7bae8017b
Fix behavior of warning ("error") call (bug #45753).
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20181
diff
changeset
|
1967 |
24047
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1968 /* |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1969 %!test <*51997> |
26596
cc0d942d0e20
Remove inconsistent warning "Octave:divide-by-zero" (bug #46650).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
26376
diff
changeset
|
1970 %! 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
|
1971 %! 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
|
1972 %! current_all = warning (); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1973 %! 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
|
1974 %! 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
|
1975 %! previous = warning (current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1976 %! assert (previous, current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1977 %! 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
|
1978 %! assert (previous, current); |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1979 */ |
9c198d1c84cd
Overhaul documentation for "warning" and fix output size (bug #51997).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
23850
diff
changeset
|
1980 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1981 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1982 set_warning_state (const std::string& id, const std::string& state) |
5794 | 1983 { |
1984 octave_value_list args; | |
1985 | |
1986 args(1) = id; | |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1987 args(0) = state; |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1988 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1989 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1990 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1991 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1992 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1993 } |
5794 | 1994 |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1995 octave_value_list |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
1996 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
|
1997 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1998 octave::interpreter& interp |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
1999 = octave::__get_interpreter__ ("set_warning_state"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2000 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2001 return Fwarning (interp, args, 1); |
10605
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
2002 } |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
2003 |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
2004 void |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
2005 disable_warning (const std::string& id) |
1834132fb50b
allow non-integer ranges as indices conditionally
John W. Eaton <jwe@octave.org>
parents:
10405
diff
changeset
|
2006 { |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2007 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
|
2008 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2009 es.disable_warning (id); |
5794 | 2010 } |
2011 | |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2012 DEFMETHOD (lasterror, interp, args, , |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23465
diff
changeset
|
2013 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
|
2014 @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
|
2015 @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
|
2016 @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
|
2017 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
|
2018 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2019 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
|
2020 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
|
2021 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
|
2022 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2023 @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
|
2024 @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
|
2025 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
|
2026 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2027 @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
|
2028 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
|
2029 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2030 @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
|
2031 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
|
2032 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
|
2033 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
|
2034 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2035 @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
|
2036 @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
|
2037 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
|
2038 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2039 @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
|
2040 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
|
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 @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
|
2043 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
|
2044 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2045 @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
|
2046 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
|
2047 @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
|
2048 @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
|
2049 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2050 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
|
2051 @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
|
2052 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
|
2053 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2054 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
|
2055 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
|
2056 @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
|
2057 @end deftypefn */) |
6361 | 2058 { |
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
|
2059 int nargin = args.length (); |
6361 | 2060 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2061 if (nargin > 1) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2062 print_usage (); |
6361 | 2063 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2064 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
|
2065 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2066 octave_scalar_map err; |
6361 | 2067 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2068 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
|
2069 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
|
2070 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2071 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
|
2072 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2073 if (nargin == 1) |
6361 | 2074 { |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
2075 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
|
2076 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2077 if (args(0).is_string ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2078 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
2079 if (args(0).string_value () != "reset") |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20946
diff
changeset
|
2080 error ("lasterror: unrecognized string argument"); |
6361 | 2081 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2082 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
|
2083 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
|
2084 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
2085 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
|
2086 } |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
2087 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
|
2088 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2089 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
|
2090 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
|
2091 std::string new_error_message; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2092 std::string new_error_id; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2093 std::string new_error_file; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2094 std::string new_error_name; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2095 int new_error_line = -1; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2096 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
|
2097 bool initialize_stack = false; |
6361 | 2098 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2099 if (new_err.contains ("message")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2100 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2101 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
|
2102 = 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
|
2103 new_error_message = tmp; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2104 } |
6361 | 2105 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2106 if (new_err.contains ("identifier")) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2107 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2108 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
|
2109 = 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
|
2110 new_error_id = tmp; |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2111 } |
6361 | 2112 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2113 if (new_err.contains ("stack")) |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2114 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
2115 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
|
2116 initialize_stack = true; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2117 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2118 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2119 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
|
2120 = 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
|
2121 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2122 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
|
2123 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2124 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
|
2125 = 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
|
2126 new_error_file = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2127 } |
6361 | 2128 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2129 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
|
2130 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2131 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
|
2132 = 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
|
2133 new_error_name = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2134 } |
6361 | 2135 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2136 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
|
2137 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2138 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
|
2139 = 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
|
2140 new_error_line = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2141 } |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2142 |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2143 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
|
2144 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2145 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
|
2146 = 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
|
2147 new_error_column = tmp; |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2148 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2149 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
2150 } |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2151 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2152 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
|
2153 es.last_error_id (new_error_id); |
6361 | 2154 |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2155 if (initialize_stack) |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
2156 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
|
2157 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
|
2158 { |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2159 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
|
2160 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
|
2161 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
|
2162 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
|
2163 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2164 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
|
2165 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2166 else |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27161
diff
changeset
|
2167 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
|
2168 } |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2169 else |
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2170 error ("lasterror: argument must be a structure or a string"); |
6361 | 2171 } |
2172 | |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21121
diff
changeset
|
2173 return ovl (err); |
6361 | 2174 } |
2175 | |
21856
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2176 /* |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2177 ## 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
|
2178 %!test |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2179 %! lasterror ("reset"); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2180 %! x = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2181 %! assert (x.identifier, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2182 %! assert (x.message, "") |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2183 %! assert (isempty (x.stack)) |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2184 %! lasterror (x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2185 %! y = lasterror (); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2186 %! assert (y, x); |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2187 */ |
c9c5340d4758
lasterror: Allow setting error state with an empty stack
Mike Miller <mtmiller@octave.org>
parents:
21751
diff
changeset
|
2188 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2189 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
|
2190 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
|
2191 @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
|
2192 @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
|
2193 @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
|
2194 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
|
2195 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2196 When called 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
|
2197 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
|
2198 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2199 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
|
2200 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2201 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
|
2202 @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
|
2203 @end deftypefn */) |
3935 | 2204 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2205 int nargin = args.length (); |
3935 | 2206 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2207 if (nargin > 2) |
5823 | 2208 print_usage (); |
3935 | 2209 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2210 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
|
2211 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2212 string_vector argv = args.make_argv ("lasterr"); |
5567 | 2213 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2214 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
|
2215 std::string prev_error_message = es.last_error_message (); |
5567 | 2216 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2217 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
|
2218 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2219 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
|
2220 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
|
2221 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2222 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
|
2223 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2224 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
|
2225 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
|
2226 } |
5567 | 2227 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2228 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
|
2229 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
|
2230 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2231 return ovl (); |
3935 | 2232 } |
2233 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2234 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
|
2235 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
|
2236 @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
|
2237 @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
|
2238 @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
|
2239 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
|
2240 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2241 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
|
2242 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
|
2243 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2244 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
|
2245 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2246 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
|
2247 @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
|
2248 @end deftypefn */) |
3934 | 2249 { |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2250 int nargin = args.length (); |
5567 | 2251 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2252 if (nargin > 2) |
5823 | 2253 print_usage (); |
3934 | 2254 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2255 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
|
2256 |
20803
c22206c1a88f
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20785
diff
changeset
|
2257 string_vector argv = args.make_argv ("lastwarn"); |
5567 | 2258 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2259 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
|
2260 std::string prev_warning_message = es.last_warning_message (); |
3934 | 2261 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2262 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
|
2263 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2264 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
|
2265 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
|
2266 } |
7883f240d8ea
Clear error/warning ID when lasterror/lastwarning called with just a message.
Rik <rik@octave.org>
parents:
20827
diff
changeset
|
2267 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
|
2268 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2269 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
|
2270 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
|
2271 } |
5567 | 2272 |
20817
3d551b2ae928
Use variable name nargin consistently in C++ code.
Rik <rik@octave.org>
parents:
20803
diff
changeset
|
2273 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
|
2274 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
|
2275 else |
20941
a4f5da7c5463
maint: Replace "octave_value_list ()" with "ovl ()".
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
2276 return ovl (); |
897 | 2277 } |
2278 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2279 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
|
2280 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
|
2281 @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
|
2282 @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
|
2283 @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
|
2284 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
|
2285 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
|
2286 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2287 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
|
2288 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
|
2289 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
|
2290 @end deftypefn */) |
3707 | 2291 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2292 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
|
2293 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2294 return es.beep_on_error (args, nargout); |
3707 | 2295 } |
2296 | |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2297 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
|
2298 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
|
2299 @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
|
2300 @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
|
2301 @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
|
2302 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
|
2303 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
|
2304 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2305 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
|
2306 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
|
2307 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2308 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
|
2309 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
|
2310 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
|
2311 @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
|
2312 @end deftypefn */) |
5794 | 2313 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2314 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
|
2315 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2316 return es.debug_on_error (args, nargout); |
5794 | 2317 } |
3707 | 2318 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2319 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
|
2320 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
|
2321 @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
|
2322 @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
|
2323 @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
|
2324 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
|
2325 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
|
2326 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21885
diff
changeset
|
2327 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
|
2328 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
|
2329 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
|
2330 @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
|
2331 @end deftypefn */) |
5794 | 2332 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2333 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
|
2334 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2335 return es.debug_on_warning (args, nargout); |
2174 | 2336 } |
2337 | |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2338 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2339 last_error_message (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2340 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2341 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
|
2342 = octave::__get_error_system__ ("last_error_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2343 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2344 return es.last_error_message (); |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2345 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2346 |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2347 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2348 last_error_id (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2349 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2350 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
|
2351 = octave::__get_error_system__ ("last_error_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2352 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2353 return es.last_error_id (); |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2354 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2355 |
18222
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2356 octave_map |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2357 last_error_stack (void) |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2358 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2359 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
|
2360 = octave::__get_error_system__ ("last_error_stack"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2361 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2362 return es.last_error_stack (); |
18222
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2363 } |
6ef8b920a7d6
include stack in exception variable (bug #41117)
Stefan Mahr <dac922@gmx.de>
parents:
18130
diff
changeset
|
2364 |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2365 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2366 last_warning_message (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2367 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2368 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
|
2369 = octave::__get_error_system__ ("last_warning_message"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2370 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2371 return es.last_warning_message (); |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2372 } |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2373 |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2374 std::string |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2375 last_warning_id (void) |
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2376 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2377 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
|
2378 = octave::__get_error_system__ ("last_warning_id"); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2379 |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2380 return es.last_warning_id (); |
7977
065c28e1c368
Modify Fcellfun to directly access the error message/id rather than use a call to Flasterr
David Bateman <dbateman@free.fr>
parents:
7976
diff
changeset
|
2381 } |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2382 |
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2383 void |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2384 interpreter_try (octave::unwind_protect& frame, |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2385 octave::error_system::try_option opt) |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2386 { |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2387 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
|
2388 = 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
|
2389 |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2390 es.interpreter_try (frame, opt); |
11029
4ab04ea74b08
make an internal function for try simulation
Jaroslav Hajek <highegg@gmail.com>
parents:
10840
diff
changeset
|
2391 } |
27161
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2392 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2393 // Deprecated variables and functions. |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2394 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2395 // 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
|
2396 int error_state = 0; |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2397 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2398 void |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2399 reset_error_handler (void) |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2400 { |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2401 octave::error_system& es |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2402 = octave::__get_error_system__ ("reset_error_handler"); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2403 |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2404 es.reset (); |
7883e6e71b0a
additional refactoring of error handling functions
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
2405 } |