Skip to main content

pyforge_ffi/
pyerrors.rs

1use crate::object::*;
2use crate::pyport::Py_ssize_t;
3use std::ffi::{c_char, c_int};
4
5extern_libpython! {
6    pub fn PyErr_SetNone(arg1: *mut PyObject);
7    pub fn PyErr_SetObject(arg1: *mut PyObject, arg2: *mut PyObject);
8    pub fn PyErr_SetString(exception: *mut PyObject, string: *const c_char);
9    pub fn PyErr_Occurred() -> *mut PyObject;
10    pub fn PyErr_Clear();
11    #[cfg_attr(Py_3_12, deprecated(note = "Use PyErr_GetRaisedException() instead."))]
12    pub fn PyErr_Fetch(
13        arg1: *mut *mut PyObject,
14        arg2: *mut *mut PyObject,
15        arg3: *mut *mut PyObject,
16    );
17    #[cfg_attr(Py_3_12, deprecated(note = "Use PyErr_SetRaisedException() instead."))]
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    pub fn PyErr_SetExcInfo(arg1: *mut PyObject, arg2: *mut PyObject, arg3: *mut PyObject);
25    pub fn Py_FatalError(message: *const c_char) -> !;
26    pub fn PyErr_GivenExceptionMatches(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
27    pub fn PyErr_ExceptionMatches(arg1: *mut PyObject) -> c_int;
28    #[cfg_attr(
29        Py_3_12,
30        deprecated(
31            note = "Use PyErr_GetRaisedException() instead, to avoid any possible de-normalization."
32        )
33    )]
34    pub fn PyErr_NormalizeException(
35        arg1: *mut *mut PyObject,
36        arg2: *mut *mut PyObject,
37        arg3: *mut *mut PyObject,
38    );
39    #[cfg(Py_3_12)]
40    pub fn PyErr_GetRaisedException() -> *mut PyObject;
41    #[cfg(Py_3_12)]
42    pub fn PyErr_SetRaisedException(exc: *mut PyObject);
43    #[cfg(Py_3_11)]
44    pub fn PyErr_GetHandledException() -> *mut PyObject;
45    #[cfg(Py_3_11)]
46    pub fn PyErr_SetHandledException(exc: *mut PyObject);
47    pub fn PyException_SetTraceback(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
48    pub fn PyException_GetTraceback(arg1: *mut PyObject) -> *mut PyObject;
49    pub fn PyException_GetCause(arg1: *mut PyObject) -> *mut PyObject;
50    pub fn PyException_SetCause(arg1: *mut PyObject, arg2: *mut PyObject);
51    pub fn PyException_GetContext(arg1: *mut PyObject) -> *mut PyObject;
52    pub fn PyException_SetContext(arg1: *mut PyObject, arg2: *mut PyObject);
53
54}
55
56#[inline]
57pub unsafe fn PyExceptionClass_Check(x: *mut PyObject) -> c_int {
58    (PyType_Check(x) != 0
59        && PyType_FastSubclass(x as *mut PyTypeObject, Py_TPFLAGS_BASE_EXC_SUBCLASS) != 0)
60        as c_int
61}
62
63#[inline]
64pub unsafe fn PyExceptionInstance_Check(x: *mut PyObject) -> c_int {
65    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
66}
67
68#[inline]
69pub unsafe fn PyExceptionInstance_Class(x: *mut PyObject) -> *mut PyObject {
70    Py_TYPE(x) as *mut PyObject
71}
72
73extern_libpython! {
74    pub static mut PyExc_BaseException: *mut PyObject;
75    #[cfg(Py_3_11)]
76    pub static mut PyExc_BaseExceptionGroup: *mut PyObject;
77    pub static mut PyExc_Exception: *mut PyObject;
78    pub static mut PyExc_StopAsyncIteration: *mut PyObject;
79
80    pub static mut PyExc_StopIteration: *mut PyObject;
81    pub static mut PyExc_GeneratorExit: *mut PyObject;
82    pub static mut PyExc_ArithmeticError: *mut PyObject;
83    pub static mut PyExc_LookupError: *mut PyObject;
84
85    pub static mut PyExc_AssertionError: *mut PyObject;
86    pub static mut PyExc_AttributeError: *mut PyObject;
87    pub static mut PyExc_BufferError: *mut PyObject;
88    pub static mut PyExc_EOFError: *mut PyObject;
89    pub static mut PyExc_FloatingPointError: *mut PyObject;
90    pub static mut PyExc_OSError: *mut PyObject;
91    pub static mut PyExc_ImportError: *mut PyObject;
92    pub static mut PyExc_ModuleNotFoundError: *mut PyObject;
93    pub static mut PyExc_IndexError: *mut PyObject;
94    pub static mut PyExc_KeyError: *mut PyObject;
95    pub static mut PyExc_KeyboardInterrupt: *mut PyObject;
96    pub static mut PyExc_MemoryError: *mut PyObject;
97    pub static mut PyExc_NameError: *mut PyObject;
98    pub static mut PyExc_OverflowError: *mut PyObject;
99    pub static mut PyExc_RuntimeError: *mut PyObject;
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
117    pub static mut PyExc_BlockingIOError: *mut PyObject;
118    pub static mut PyExc_BrokenPipeError: *mut PyObject;
119    pub static mut PyExc_ChildProcessError: *mut PyObject;
120    pub static mut PyExc_ConnectionError: *mut PyObject;
121    pub static mut PyExc_ConnectionAbortedError: *mut PyObject;
122    pub static mut PyExc_ConnectionRefusedError: *mut PyObject;
123    pub static mut PyExc_ConnectionResetError: *mut PyObject;
124    pub static mut PyExc_FileExistsError: *mut PyObject;
125    pub static mut PyExc_FileNotFoundError: *mut PyObject;
126    pub static mut PyExc_InterruptedError: *mut PyObject;
127    pub static mut PyExc_IsADirectoryError: *mut PyObject;
128    pub static mut PyExc_NotADirectoryError: *mut PyObject;
129    pub static mut PyExc_PermissionError: *mut PyObject;
130    pub static mut PyExc_ProcessLookupError: *mut PyObject;
131    pub static mut PyExc_TimeoutError: *mut PyObject;
132
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
138    pub static mut PyExc_RecursionErrorInst: *mut PyObject;
139
140    /* Predefined warning categories */
141    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    pub static mut PyExc_ResourceWarning: *mut PyObject;
152    #[cfg(Py_3_10)]
153    pub static mut PyExc_EncodingWarning: *mut PyObject;
154}
155
156extern_libpython! {
157    pub fn PyErr_BadArgument() -> c_int;
158    pub fn PyErr_NoMemory() -> *mut PyObject;
159    pub fn PyErr_SetFromErrno(arg1: *mut PyObject) -> *mut PyObject;
160    pub fn PyErr_SetFromErrnoWithFilenameObject(
161        arg1: *mut PyObject,
162        arg2: *mut PyObject,
163    ) -> *mut PyObject;
164    pub fn PyErr_SetFromErrnoWithFilenameObjects(
165        arg1: *mut PyObject,
166        arg2: *mut PyObject,
167        arg3: *mut PyObject,
168    ) -> *mut PyObject;
169    pub fn PyErr_SetFromErrnoWithFilename(
170        exc: *mut PyObject,
171        filename: *const c_char,
172    ) -> *mut PyObject;
173    pub fn PyErr_Format(exception: *mut PyObject, format: *const c_char, ...) -> *mut PyObject;
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);
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}