python3_sys/
pyerrors.rs

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    // Compatibility aliases
132    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    // 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    #[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}