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