1use libc::{c_char, c_int};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[cfg_attr(windows, link(name = "pythonXY"))]
7extern "C" {
8 pub fn PyErr_SetNone(arg1: *mut PyObject) -> ();
9 pub fn PyErr_SetObject(arg1: *mut PyObject, arg2: *mut PyObject) -> ();
10 pub fn PyErr_SetString(exception: *mut PyObject, string: *const c_char) -> ();
11 pub fn PyErr_Occurred() -> *mut PyObject;
12 pub fn PyErr_Clear() -> ();
13 pub fn PyErr_Fetch(
14 arg1: *mut *mut PyObject,
15 arg2: *mut *mut PyObject,
16 arg3: *mut *mut PyObject,
17 ) -> ();
18 pub fn PyErr_Restore(arg1: *mut PyObject, arg2: *mut PyObject, arg3: *mut PyObject) -> ();
19 pub fn PyErr_GetExcInfo(
20 arg1: *mut *mut PyObject,
21 arg2: *mut *mut PyObject,
22 arg3: *mut *mut PyObject,
23 ) -> ();
24 #[cfg(Py_3_11)]
25 pub fn PyErr_GetHandledException() -> *mut PyObject;
26 #[cfg(Py_3_11)]
27 pub fn PyErr_SetHandledException(exc: *mut PyObject);
28 pub fn PyErr_SetExcInfo(arg1: *mut PyObject, arg2: *mut PyObject, arg3: *mut PyObject) -> ();
29 pub fn Py_FatalError(message: *const c_char) -> !;
30 pub fn PyErr_GivenExceptionMatches(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
31 pub fn PyErr_ExceptionMatches(arg1: *mut PyObject) -> c_int;
32 pub fn PyErr_NormalizeException(
33 arg1: *mut *mut PyObject,
34 arg2: *mut *mut PyObject,
35 arg3: *mut *mut PyObject,
36 ) -> ();
37 pub fn PyException_SetTraceback(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
38 pub fn PyException_GetTraceback(arg1: *mut PyObject) -> *mut PyObject;
39 pub fn PyException_GetCause(arg1: *mut PyObject) -> *mut PyObject;
40 pub fn PyException_SetCause(arg1: *mut PyObject, arg2: *mut PyObject) -> ();
41 pub fn PyException_GetContext(arg1: *mut PyObject) -> *mut PyObject;
42 pub fn PyException_SetContext(arg1: *mut PyObject, arg2: *mut PyObject) -> ();
43}
44
45#[inline]
46pub unsafe fn PyExceptionClass_Check(x: *mut PyObject) -> c_int {
47 (PyType_Check(x) != 0
48 && PyType_FastSubclass(x as *mut PyTypeObject, Py_TPFLAGS_BASE_EXC_SUBCLASS) != 0)
49 as c_int
50}
51
52#[inline]
53pub unsafe fn PyExceptionInstance_Check(x: *mut PyObject) -> c_int {
54 PyType_FastSubclass((*x).ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS)
55}
56
57#[inline]
58pub unsafe fn PyExceptionInstance_Class(x: *mut PyObject) -> *mut PyObject {
59 (*x).ob_type as *mut PyObject
60}
61
62#[cfg(all(not(Py_3_8), not(Py_LIMITED_API)))]
63#[inline]
64pub unsafe fn PyExceptionClass_Name(x: *mut PyObject) -> *const c_char {
65 (*(*x).ob_type).tp_name
66}
67
68#[cfg_attr(windows, link(name = "pythonXY"))]
69extern "C" {
70 #[cfg(Py_3_8)]
71 pub fn PyExceptionClass_Name(o: *mut PyObject) -> *const c_char;
72
73 pub static mut PyExc_BaseException: *mut PyObject;
74 pub static mut PyExc_Exception: *mut PyObject;
75 #[cfg(Py_3_11)]
76 pub static mut PyExc_BaseExceptionGroup: *mut PyObject;
77 #[cfg(Py_3_5)]
78 pub static mut PyExc_StopAsyncIteration: *mut PyObject;
79 pub static mut PyExc_StopIteration: *mut PyObject;
80 pub static mut PyExc_GeneratorExit: *mut PyObject;
81 pub static mut PyExc_ArithmeticError: *mut PyObject;
82 pub static mut PyExc_LookupError: *mut PyObject;
83 pub static mut PyExc_AssertionError: *mut PyObject;
84 pub static mut PyExc_AttributeError: *mut PyObject;
85 pub static mut PyExc_BufferError: *mut PyObject;
86 pub static mut PyExc_EOFError: *mut PyObject;
87 pub static mut PyExc_FloatingPointError: *mut PyObject;
88 pub static mut PyExc_OSError: *mut PyObject;
89 pub static mut PyExc_ImportError: *mut PyObject;
90 #[cfg(Py_3_6)]
91 pub static mut PyExc_ModuleNotFoundError: *mut PyObject;
92 pub static mut PyExc_IndexError: *mut PyObject;
93 pub static mut PyExc_KeyError: *mut PyObject;
94 pub static mut PyExc_KeyboardInterrupt: *mut PyObject;
95 pub static mut PyExc_MemoryError: *mut PyObject;
96 pub static mut PyExc_NameError: *mut PyObject;
97 pub static mut PyExc_OverflowError: *mut PyObject;
98 pub static mut PyExc_RuntimeError: *mut PyObject;
99 #[cfg(Py_3_5)]
100 pub static mut PyExc_RecursionError: *mut PyObject;
101 pub static mut PyExc_NotImplementedError: *mut PyObject;
102 pub static mut PyExc_SyntaxError: *mut PyObject;
103 pub static mut PyExc_IndentationError: *mut PyObject;
104 pub static mut PyExc_TabError: *mut PyObject;
105 pub static mut PyExc_ReferenceError: *mut PyObject;
106 pub static mut PyExc_SystemError: *mut PyObject;
107 pub static mut PyExc_SystemExit: *mut PyObject;
108 pub static mut PyExc_TypeError: *mut PyObject;
109 pub static mut PyExc_UnboundLocalError: *mut PyObject;
110 pub static mut PyExc_UnicodeError: *mut PyObject;
111 pub static mut PyExc_UnicodeEncodeError: *mut PyObject;
112 pub static mut PyExc_UnicodeDecodeError: *mut PyObject;
113 pub static mut PyExc_UnicodeTranslateError: *mut PyObject;
114 pub static mut PyExc_ValueError: *mut PyObject;
115 pub static mut PyExc_ZeroDivisionError: *mut PyObject;
116 pub static mut PyExc_BlockingIOError: *mut PyObject;
117 pub static mut PyExc_BrokenPipeError: *mut PyObject;
118 pub static mut PyExc_ChildProcessError: *mut PyObject;
119 pub static mut PyExc_ConnectionError: *mut PyObject;
120 pub static mut PyExc_ConnectionAbortedError: *mut PyObject;
121 pub static mut PyExc_ConnectionRefusedError: *mut PyObject;
122 pub static mut PyExc_ConnectionResetError: *mut PyObject;
123 pub static mut PyExc_FileExistsError: *mut PyObject;
124 pub static mut PyExc_FileNotFoundError: *mut PyObject;
125 pub static mut PyExc_InterruptedError: *mut PyObject;
126 pub static mut PyExc_IsADirectoryError: *mut PyObject;
127 pub static mut PyExc_NotADirectoryError: *mut PyObject;
128 pub static mut PyExc_PermissionError: *mut PyObject;
129 pub static mut PyExc_ProcessLookupError: *mut PyObject;
130
131 pub static mut PyExc_TimeoutError: *mut PyObject;
133 pub static mut PyExc_EnvironmentError: *mut PyObject;
134 pub static mut PyExc_IOError: *mut PyObject;
135 #[cfg(windows)]
136 pub static mut PyExc_WindowsError: *mut PyObject;
137 #[cfg(not(Py_3_6))]
138 pub static mut PyExc_RecursionErrorInst: *mut PyObject;
139
140 pub static mut PyExc_Warning: *mut PyObject;
142 pub static mut PyExc_UserWarning: *mut PyObject;
143 pub static mut PyExc_DeprecationWarning: *mut PyObject;
144 pub static mut PyExc_PendingDeprecationWarning: *mut PyObject;
145 pub static mut PyExc_SyntaxWarning: *mut PyObject;
146 pub static mut PyExc_RuntimeWarning: *mut PyObject;
147 pub static mut PyExc_FutureWarning: *mut PyObject;
148 pub static mut PyExc_ImportWarning: *mut PyObject;
149 pub static mut PyExc_UnicodeWarning: *mut PyObject;
150 pub static mut PyExc_BytesWarning: *mut PyObject;
151 #[cfg(Py_3_10)]
152 pub static mut PyExc_EncodingWarning: *mut PyObject;
153 pub static mut PyExc_ResourceWarning: *mut PyObject;
154
155 pub fn PyErr_BadArgument() -> c_int;
156 pub fn PyErr_NoMemory() -> *mut PyObject;
157 pub fn PyErr_SetFromErrno(arg1: *mut PyObject) -> *mut PyObject;
158 pub fn PyErr_SetFromErrnoWithFilenameObject(
159 arg1: *mut PyObject,
160 arg2: *mut PyObject,
161 ) -> *mut PyObject;
162 #[cfg(Py_3_4)]
163 pub fn PyErr_SetFromErrnoWithFilenameObjects(
164 arg1: *mut PyObject,
165 arg2: *mut PyObject,
166 arg3: *mut PyObject,
167 ) -> *mut PyObject;
168 pub fn PyErr_SetFromErrnoWithFilename(
169 exc: *mut PyObject,
170 filename: *const c_char,
171 ) -> *mut PyObject;
172 pub fn PyErr_Format(exception: *mut PyObject, format: *const c_char, ...) -> *mut PyObject;
173 #[cfg(Py_3_6)]
174 pub fn PyErr_SetImportErrorSubclass(
175 arg1: *mut PyObject,
176 arg2: *mut PyObject,
177 arg3: *mut PyObject,
178 arg4: *mut PyObject,
179 ) -> *mut PyObject;
180 pub fn PyErr_SetImportError(
181 arg1: *mut PyObject,
182 arg2: *mut PyObject,
183 arg3: *mut PyObject,
184 ) -> *mut PyObject;
185 pub fn PyErr_BadInternalCall() -> ();
186 pub fn _PyErr_BadInternalCall(filename: *const c_char, lineno: c_int) -> ();
187 pub fn PyErr_NewException(
188 name: *const c_char,
189 base: *mut PyObject,
190 dict: *mut PyObject,
191 ) -> *mut PyObject;
192 pub fn PyErr_NewExceptionWithDoc(
193 name: *const c_char,
194 doc: *const c_char,
195 base: *mut PyObject,
196 dict: *mut PyObject,
197 ) -> *mut PyObject;
198 pub fn PyErr_WriteUnraisable(arg1: *mut PyObject) -> ();
199 pub fn PyErr_CheckSignals() -> c_int;
200 pub fn PyErr_SetInterrupt() -> ();
201 #[cfg(Py_3_10)]
202 pub fn PyErr_SetInterruptEx(signum: c_int) -> c_int;
203 pub fn PyErr_SyntaxLocation(filename: *const c_char, lineno: c_int) -> ();
204 pub fn PyErr_SyntaxLocationEx(filename: *const c_char, lineno: c_int, col_offset: c_int) -> ();
205 pub fn PyErr_ProgramText(filename: *const c_char, lineno: c_int) -> *mut PyObject;
206 pub fn PyUnicodeDecodeError_Create(
207 encoding: *const c_char,
208 object: *const c_char,
209 length: Py_ssize_t,
210 start: Py_ssize_t,
211 end: Py_ssize_t,
212 reason: *const c_char,
213 ) -> *mut PyObject;
214 pub fn PyUnicodeEncodeError_GetEncoding(arg1: *mut PyObject) -> *mut PyObject;
215 pub fn PyUnicodeDecodeError_GetEncoding(arg1: *mut PyObject) -> *mut PyObject;
216 pub fn PyUnicodeEncodeError_GetObject(arg1: *mut PyObject) -> *mut PyObject;
217 pub fn PyUnicodeDecodeError_GetObject(arg1: *mut PyObject) -> *mut PyObject;
218 pub fn PyUnicodeTranslateError_GetObject(arg1: *mut PyObject) -> *mut PyObject;
219 pub fn PyUnicodeEncodeError_GetStart(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
220 pub fn PyUnicodeDecodeError_GetStart(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
221 pub fn PyUnicodeTranslateError_GetStart(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
222 pub fn PyUnicodeEncodeError_SetStart(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
223 pub fn PyUnicodeDecodeError_SetStart(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
224 pub fn PyUnicodeTranslateError_SetStart(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
225 pub fn PyUnicodeEncodeError_GetEnd(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
226 pub fn PyUnicodeDecodeError_GetEnd(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
227 pub fn PyUnicodeTranslateError_GetEnd(arg1: *mut PyObject, arg2: *mut Py_ssize_t) -> c_int;
228 pub fn PyUnicodeEncodeError_SetEnd(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
229 pub fn PyUnicodeDecodeError_SetEnd(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
230 pub fn PyUnicodeTranslateError_SetEnd(arg1: *mut PyObject, arg2: Py_ssize_t) -> c_int;
231 pub fn PyUnicodeEncodeError_GetReason(arg1: *mut PyObject) -> *mut PyObject;
232 pub fn PyUnicodeDecodeError_GetReason(arg1: *mut PyObject) -> *mut PyObject;
233 pub fn PyUnicodeTranslateError_GetReason(arg1: *mut PyObject) -> *mut PyObject;
234 pub fn PyUnicodeEncodeError_SetReason(exc: *mut PyObject, reason: *const c_char) -> c_int;
235 pub fn PyUnicodeDecodeError_SetReason(exc: *mut PyObject, reason: *const c_char) -> c_int;
236 pub fn PyUnicodeTranslateError_SetReason(exc: *mut PyObject, reason: *const c_char) -> c_int;
237}