annotate liboctave/util/quit.h @ 27471:fd32c1a9b1bd

revamp error handling In "error" and similar functions that ultimately call it, simply throw an exception that contains information about the error (message, id, stack info) instead of printing an error message immediately and then throwing an exception. The new approach is more flexible and sllows for some simplification of the error message routines as they no longer need feedback from the interpreter to know when to display or buffer messages. It is now the responsibility of any code that catches an execution exception to determine whether and when to display error messages. * quit.h, quit.cc (class frame_info): New class. (execution_exception::m_err_type, execution_exception::m_id, execution_exception::m_message, execution_exception::m_stack_info): New data members. (class execution_exception): Store error type, message, id, and stack info. Provide methods setting and accessing data as needed and for generating stack trace message from stack info. (execution_exception::m_stack_trace): Delete data member. execution_exception::set_stack_trace): Delete method. (execution_exception::set_err_type, execution_exception::err_type, execution_exception::stack_trace, execution_exception::set_identifier, execution_exception::identifier, execution_exception::message, execution_exception::set_stack_info, execution_exception::display): New methods. * call-stack.cc, call-stack.h (call_stack::backtrace_info): New functions. * oct-parse.yy (maybe_print_last_error_message): Delete function and all uses. * pt-eval.h, pt-eval.cc (tree_evaluator::backtrace_info, tree_evaluator::backtrace_message): New functions. (tree_evaluator::backtrace): Now const. (tree_evaluator::visit_unwind_protect_command, tree_evaluator::do_unwind_protect_cleanup_code, tree_evaluator::visit_try_catch_command, tree_evaluator::evalin, tree_evaluator::eval, tree_evaluator::repl, debugger::repl): Save current exception info. * interpreter.h, interpreter.cc (interpreter::handle_exception): New function. Use it in place of direct calls to error_system::save_exception, error_system::display_exception (or execution_exception::display) and interpreter::recover_from_exception, so that we have uniform behavior when responding to an execution exception. * error.h, error.cc (error_system::m_buffer_error_messages, error_system::m_discard_error_messages, error_system::m_in_try_catch): Delete data members and associated functions. Remove all uses. Because the error system no longer displays messages immediately, it does not need to track whether to discard or buffer error messages or know whether error and warning functions are invoked inside of try-catch blocks. Everywhere that catches execution_exceptions must now handle saving the exception state (for lasterror) and displaying the error message and traceback as needed. (): Delete functions and all uses. (error_stack_frame): Delete struct definition. (verror, vpr_where, pr_where_internal, pr_where, maybe_enter_debugger, make_execution_exception, vmessage_with_id, message_with_id, error_system::maybe_enter_debugger, reset_error_handler, error_system::reset): Delete functions and all uses. (error_system::try_option): Delete enum and all uses. (vusage, error_1, error_system::vwarning, error_system::rethrow_error, error_system::interpreter_try): Simplify. (format_message, make_stack_map, error_system::throw_error, error_system::save_exception, error_system::display_exception): New functions. (Ferror): Update for error_system changes.
author John W. Eaton <jwe@octave.org>
date Fri, 04 Oct 2019 01:15:13 -0400
parents d4fdaeaab7f3
children 63b417917f5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
1 /*
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
2
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 25147
diff changeset
3 Copyright (C) 2002-2019 John W. Eaton
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
4
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
6
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24520
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
8 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24520
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
10 (at your option) any later version.
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
11
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22402
diff changeset
15 GNU General Public License for more details.
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
16
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6123
diff changeset
18 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24520
diff changeset
19 <https://www.gnu.org/licenses/>.
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
20
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
21 */
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
22
20791
f7084eae3318 maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents: 20785
diff changeset
23 #if ! defined (octave_quit_h)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
24 #define octave_quit_h 1
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
25
21244
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21227
diff changeset
26 #include "octave-config.h"
1473547f50f5 include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents: 21227
diff changeset
27
21941
1d23b75cbcd1 hide signal.h from C++ sources
John W. Eaton <jwe@octave.org>
parents: 21849
diff changeset
28 /* The signal header is just needed for the sig_atomic_t type. */
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
29 #if defined (__cplusplus)
21941
1d23b75cbcd1 hide signal.h from C++ sources
John W. Eaton <jwe@octave.org>
parents: 21849
diff changeset
30 # include <csignal>
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
31 # include <iosfwd>
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
32 # include <list>
21202
f7121e111991 maint: indent #ifdef blocks in liboctave and src directories.
Rik <rik@octave.org>
parents: 21040
diff changeset
33 # include <string>
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
34 extern "C" {
21941
1d23b75cbcd1 hide signal.h from C++ sources
John W. Eaton <jwe@octave.org>
parents: 21849
diff changeset
35 #else
1d23b75cbcd1 hide signal.h from C++ sources
John W. Eaton <jwe@octave.org>
parents: 21849
diff changeset
36 # include <signal.h>
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
37 #endif
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
38
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
39 #if defined (__cplusplus)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
40
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
41 namespace octave
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
42 {
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
43 class frame_info
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
44 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
45 public:
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
46
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
47 frame_info (void) = default;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
48
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
49 frame_info (const std::string& file_name, const std::string& fcn_name,
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
50 int line, int column)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
51 : m_file_name (file_name), m_fcn_name (fcn_name), m_line (line),
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
52 m_column (column)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
53 { }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
54
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
55 frame_info (const frame_info&) = default;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
56
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
57 frame_info& operator = (const frame_info&) = default;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
58
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
59 ~frame_info (void) = default;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
60
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
61 std::string file_name (void) const { return m_file_name; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
62
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
63 std::string fcn_name (void) const { return m_fcn_name; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
64
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
65 int line (void) const { return m_line; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
66
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
67 int column (void) const { return m_column; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
68
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
69 private:
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
70
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
71 std::string m_file_name;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
72
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
73 std::string m_fcn_name;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
74
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
75 int m_line;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
76
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
77 int m_column;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
78 };
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
79
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
80 inline bool operator == (const frame_info& a, const frame_info& b)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
81 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
82 return (a.file_name () == b.file_name ()
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
83 && a.fcn_name () == b.fcn_name ()
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
84 && a.line () == b.line ()
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
85 && a.column () == b.column ());
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
86 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
87
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
88 class
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
89 execution_exception
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
90 {
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
91 public:
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
92
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
93 typedef std::list<frame_info> stack_info_type;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
94
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
95 execution_exception (const std::string& err_type = "error",
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
96 const std::string& id = "",
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
97 const std::string& message = "unspecified error",
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
98 const stack_info_type& stack_info = stack_info_type ())
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
99 : m_err_type (err_type), m_id (id), m_message (message),
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
100 m_stack_info (stack_info)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
101 { }
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
102
27381
d4fdaeaab7f3 use default or deleted ctors/dtors/assignment ops in liboctave/util
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
103 execution_exception (const execution_exception&) = default;
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
104
27381
d4fdaeaab7f3 use default or deleted ctors/dtors/assignment ops in liboctave/util
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
105 execution_exception& operator = (const execution_exception&) = default;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
106
22868
87e3163f6c87 use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
107 ~execution_exception (void) = default;
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
108
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
109 void set_err_type (const std::string& et)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
110 {
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
111 m_err_type = et;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
112 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
113
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
114 std::string err_type (void) const { return m_err_type; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
115
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
116 virtual std::string stack_trace (void) const;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
117
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
118 void set_identifier (const std::string& id)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
119 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
120 m_id = id;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
121 }
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
122
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
123 virtual std::string identifier (void) const { return m_id; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
124
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
125 void set_message (const std::string& msg)
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
126 {
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
127 m_message = msg;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
128 }
20785
b6f2909e7f94 always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents: 20666
diff changeset
129
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
130 virtual std::string message (void) const { return m_message; }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
131
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
132 virtual stack_info_type stack_info (void) const
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
133 {
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
134 return m_stack_info;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
135 }
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
136
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
137 void set_stack_info (const stack_info_type& stack_info)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
138 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
139 m_stack_info = stack_info;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
140 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
141
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
142 virtual void display (std::ostream& os) const;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
143
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
144 private:
20666
e0e2c2ce7e94 defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
145
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
146 std::string m_err_type;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
147
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
148 std::string m_id;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
149
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
150 std::string m_message;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
151
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27381
diff changeset
152 stack_info_type m_stack_info;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
153 };
20785
b6f2909e7f94 always throw exception after debugging with debug_on_error
John W. Eaton <jwe@octave.org>
parents: 20666
diff changeset
154
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
155 class
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
156 exit_exception
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
157 {
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
158 public:
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
159
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
160 exit_exception (int exit_status = 0, bool safe_to_return = false)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
161 : m_exit_status (exit_status), m_safe_to_return (safe_to_return)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
162 { }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
163
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
164 exit_exception (const exit_exception& ex)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
165 : m_exit_status (ex.m_exit_status), m_safe_to_return (ex.m_safe_to_return)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
166 { }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
167
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
168 exit_exception& operator = (exit_exception& ex)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
169 {
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
170 if (this != &ex)
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
171 {
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
172 m_exit_status = ex.m_exit_status;
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
173 m_safe_to_return = ex.m_safe_to_return;
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
174 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
175
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
176 return *this;
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
177 }
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
178
22868
87e3163f6c87 use c++11 "= default" syntax for declaration of trivial destructors
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
179 ~exit_exception (void) = default;
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
180
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
181 int exit_status (void) const { return m_exit_status; }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
182
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
183 bool safe_to_return (void) const { return m_safe_to_return; }
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
184
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
185 private:
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
186
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
187 int m_exit_status;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
188
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
189 bool m_safe_to_return;
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
190 };
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
191
22327
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
192 class
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
193 interrupt_exception
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
194 {
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
195 };
d0562b3159c7 move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22323
diff changeset
196 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
197
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
198 #endif
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
199
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
200 enum octave_exception
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
201 {
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
202 octave_no_exception = 0,
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
203 octave_exec_exception = 1,
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
204 octave_alloc_exception = 3,
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
205 octave_quit_exception = 4
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
206 };
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
207
5133
7191f6e086f9 [project @ 2005-02-08 19:17:41 by jwe]
jwe
parents: 4793
diff changeset
208 /*
7191f6e086f9 [project @ 2005-02-08 19:17:41 by jwe]
jwe
parents: 4793
diff changeset
209 > 0: interrupt pending
7191f6e086f9 [project @ 2005-02-08 19:17:41 by jwe]
jwe
parents: 4793
diff changeset
210 0: no interrupt pending
7191f6e086f9 [project @ 2005-02-08 19:17:41 by jwe]
jwe
parents: 4793
diff changeset
211 < 0: handling interrupt
7191f6e086f9 [project @ 2005-02-08 19:17:41 by jwe]
jwe
parents: 4793
diff changeset
212 */
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
213 OCTAVE_API extern sig_atomic_t octave_interrupt_state;
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4155
diff changeset
214
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
215 OCTAVE_API extern sig_atomic_t octave_exception_state;
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
216
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
217 OCTAVE_DEPRECATED (4.4, "see the Octave documentation for other options")
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
218 OCTAVE_API extern sig_atomic_t octave_exit_exception_status;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
219
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
220 OCTAVE_DEPRECATED (4.4, "see the Octave documentation for other options")
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
221 OCTAVE_API extern sig_atomic_t octave_exit_exception_safe_to_return;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
222
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
223 OCTAVE_API extern volatile sig_atomic_t octave_signal_caught;
5142
0f9108f298ab [project @ 2005-02-12 02:29:34 by jwe]
jwe
parents: 5133
diff changeset
224
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
225 OCTAVE_API extern void octave_handle_signal (void);
5142
0f9108f298ab [project @ 2005-02-12 02:29:34 by jwe]
jwe
parents: 5133
diff changeset
226
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
227 OCTAVE_NORETURN OCTAVE_API extern void octave_throw_interrupt_exception (void);
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
228
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
229 OCTAVE_NORETURN OCTAVE_API extern void octave_throw_execution_exception (void);
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
230
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
231 OCTAVE_NORETURN OCTAVE_API extern void octave_throw_bad_alloc (void);
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4155
diff changeset
232
23615
be7b884ac589 use version number in OCTAVE_DEPRECATED macro
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
233 OCTAVE_DEPRECATED (4.4, "see the Octave documentation for other options")
23238
3de5efeffb86 Eliminate compilation warnings related to clean_up_and_exit fcn (bug #50265).
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
234 OCTAVE_NORETURN OCTAVE_API extern void
3de5efeffb86 Eliminate compilation warnings related to clean_up_and_exit fcn (bug #50265).
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
235 octave_throw_exit_exception (int exit_status, int safe_to_return);
3de5efeffb86 Eliminate compilation warnings related to clean_up_and_exit fcn (bug #50265).
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
236
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
237 OCTAVE_API extern void octave_rethrow_exception (void);
7481
78f3811155f7 use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
238
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
239 #if defined (__cplusplus)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
240
23615
be7b884ac589 use version number in OCTAVE_DEPRECATED macro
John W. Eaton <jwe@octave.org>
parents: 23426
diff changeset
241 OCTAVE_DEPRECATED (4.4, "see the Octave documentation for other options")
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
242 extern OCTAVE_API void
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
243 clean_up_and_exit (int exit_status, bool safe_to_return = false);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 21949
diff changeset
244
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
245 inline void octave_quit (void)
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
246 {
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
247 if (octave_signal_caught)
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
248 {
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
249 octave_signal_caught = 0;
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
250 octave_handle_signal ();
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
251 }
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
252 };
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
253
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
254 #define OCTAVE_QUIT octave_quit ()
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
255
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
256 #else
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
257
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
258 #define OCTAVE_QUIT \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
259 do \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
260 { \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
261 if (octave_signal_caught) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
262 { \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
263 octave_signal_caught = 0; \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
264 octave_handle_signal (); \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
265 } \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
266 } \
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
267 while (0)
10142
829e69ec3110 make OCTAVE_QUIT a function
Jaroslav Hajek <highegg@gmail.com>
parents: 9933
diff changeset
268 #endif
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
269
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
270 /* The following macros are obsolete. Interrupting immediately by
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
271 calling siglongjmp or similar from a signal handler is asking for
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
272 trouble. We need another way to handle that situation. Rather
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
273 than remove them, however, please leave them in place until we can
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
274 either find a replacement or determine that a given block of code
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
275 does not need special treatment. They are defined to create a
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
276 dummy do-while block to match the previous definitions. */
4302
ebc2d8e4968b [project @ 2003-01-22 22:02:23 by jwe]
jwe
parents: 4268
diff changeset
277
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
278 #define BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE \
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
279 do \
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
280 {
4302
ebc2d8e4968b [project @ 2003-01-22 22:02:23 by jwe]
jwe
parents: 4268
diff changeset
281
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
282 #define END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE \
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
283 } \
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
284 while (0)
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
285
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
286 #if defined (__cplusplus)
4196
f874c6c68845 [project @ 2002-11-20 22:27:01 by jwe]
jwe
parents: 4182
diff changeset
287
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
288 /* Likewise, these are obsolete. They are defined to create a
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
289 dummy scope to match the previous versions that created a try-catch
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
290 block. */
4180
84fe3ca3a246 [project @ 2002-11-15 04:47:01 by jwe]
jwe
parents: 4155
diff changeset
291
24520
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
292 #define BEGIN_INTERRUPT_WITH_EXCEPTIONS \
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
293 {
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
294
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
295 #define END_INTERRUPT_WITH_EXCEPTIONS \
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
296 }
c5c11b07598a refactor signal handling (bug #52757)
John W. Eaton <jwe@octave.org>
parents: 23615
diff changeset
297
4196
f874c6c68845 [project @ 2002-11-20 22:27:01 by jwe]
jwe
parents: 4182
diff changeset
298 #endif
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
299
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21244
diff changeset
300 #if defined (__cplusplus)
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
301 }
4560
661246155bbc [project @ 2003-10-28 21:02:43 by jwe]
jwe
parents: 4551
diff changeset
302
4572
4623ef02a605 [project @ 2003-10-31 03:07:05 by jwe]
jwe
parents: 4560
diff changeset
303 /* These should only be declared for C++ code, and should also be
4623ef02a605 [project @ 2003-10-31 03:07:05 by jwe]
jwe
parents: 4560
diff changeset
304 outside of any extern "C" block. */
4560
661246155bbc [project @ 2003-10-28 21:02:43 by jwe]
jwe
parents: 4551
diff changeset
305
21227
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
306 extern OCTAVE_API void (*octave_signal_hook) (void);
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
307 extern OCTAVE_API void (*octave_interrupt_hook) (void);
25150962bfd3 eliminate CRUFT_API macro
John W. Eaton <jwe@octave.org>
parents: 21213
diff changeset
308 extern OCTAVE_API void (*octave_bad_alloc_hook) (void);
4560
661246155bbc [project @ 2003-10-28 21:02:43 by jwe]
jwe
parents: 4551
diff changeset
309
4153
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
310 #endif
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
311
6b96ce9f5743 [project @ 2002-11-06 20:38:49 by jwe]
jwe
parents:
diff changeset
312 #endif