• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef Py_INTERNAL_PYERRORS_H
2 #define Py_INTERNAL_PYERRORS_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #ifndef Py_BUILD_CORE
8 #  error "this header requires Py_BUILD_CORE define"
9 #endif
10 
11 
12 /* Error handling definitions */
13 
14 extern _PyErr_StackItem* _PyErr_GetTopmostException(PyThreadState *tstate);
15 extern PyObject* _PyErr_GetHandledException(PyThreadState *);
16 extern void _PyErr_SetHandledException(PyThreadState *, PyObject *);
17 extern void _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
18 
19 // Export for '_testinternalcapi' shared extension
20 PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
21 
22 
23 // Like PyErr_Format(), but saves current exception as __context__ and
24 // __cause__.
25 // Export for '_sqlite3' shared extension.
26 PyAPI_FUNC(PyObject*) _PyErr_FormatFromCause(
27     PyObject *exception,
28     const char *format,   /* ASCII-encoded string  */
29     ...
30     );
31 
32 extern int _PyException_AddNote(
33      PyObject *exc,
34      PyObject *note);
35 
36 extern int _PyErr_CheckSignals(void);
37 
38 /* Support for adding program text to SyntaxErrors */
39 
40 // Export for test_peg_generator
41 PyAPI_FUNC(PyObject*) _PyErr_ProgramDecodedTextObject(
42     PyObject *filename,
43     int lineno,
44     const char* encoding);
45 
46 extern PyObject* _PyUnicodeTranslateError_Create(
47     PyObject *object,
48     Py_ssize_t start,
49     Py_ssize_t end,
50     const char *reason          /* UTF-8 encoded string */
51     );
52 
53 extern void _Py_NO_RETURN _Py_FatalErrorFormat(
54     const char *func,
55     const char *format,
56     ...);
57 
58 extern PyObject* _PyErr_SetImportErrorWithNameFrom(
59         PyObject *,
60         PyObject *,
61         PyObject *,
62         PyObject *);
63 
64 
65 /* runtime lifecycle */
66 
67 extern PyStatus _PyErr_InitTypes(PyInterpreterState *);
68 extern void _PyErr_FiniTypes(PyInterpreterState *);
69 
70 
71 /* other API */
72 
_PyErr_Occurred(PyThreadState * tstate)73 static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
74 {
75     assert(tstate != NULL);
76     if (tstate->current_exception == NULL) {
77         return NULL;
78     }
79     return (PyObject *)Py_TYPE(tstate->current_exception);
80 }
81 
_PyErr_ClearExcState(_PyErr_StackItem * exc_state)82 static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state)
83 {
84     Py_CLEAR(exc_state->exc_value);
85 }
86 
87 extern PyObject* _PyErr_StackItemToExcInfoTuple(
88     _PyErr_StackItem *err_info);
89 
90 extern void _PyErr_Fetch(
91     PyThreadState *tstate,
92     PyObject **type,
93     PyObject **value,
94     PyObject **traceback);
95 
96 extern PyObject* _PyErr_GetRaisedException(PyThreadState *tstate);
97 
98 PyAPI_FUNC(int) _PyErr_ExceptionMatches(
99     PyThreadState *tstate,
100     PyObject *exc);
101 
102 extern void _PyErr_SetRaisedException(PyThreadState *tstate, PyObject *exc);
103 
104 extern void _PyErr_Restore(
105     PyThreadState *tstate,
106     PyObject *type,
107     PyObject *value,
108     PyObject *traceback);
109 
110 extern void _PyErr_SetObject(
111     PyThreadState *tstate,
112     PyObject *type,
113     PyObject *value);
114 
115 extern void _PyErr_ChainStackItem(void);
116 
117 PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
118 
119 extern void _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
120 
121 extern PyObject* _PyErr_NoMemory(PyThreadState *tstate);
122 
123 PyAPI_FUNC(void) _PyErr_SetString(
124     PyThreadState *tstate,
125     PyObject *exception,
126     const char *string);
127 
128 PyAPI_FUNC(PyObject*) _PyErr_Format(
129     PyThreadState *tstate,
130     PyObject *exception,
131     const char *format,
132     ...);
133 
134 extern void _PyErr_NormalizeException(
135     PyThreadState *tstate,
136     PyObject **exc,
137     PyObject **val,
138     PyObject **tb);
139 
140 extern PyObject* _PyErr_FormatFromCauseTstate(
141     PyThreadState *tstate,
142     PyObject *exception,
143     const char *format,
144     ...);
145 
146 extern PyObject* _PyExc_CreateExceptionGroup(
147     const char *msg,
148     PyObject *excs);
149 
150 extern PyObject* _PyExc_PrepReraiseStar(
151     PyObject *orig,
152     PyObject *excs);
153 
154 extern int _PyErr_CheckSignalsTstate(PyThreadState *tstate);
155 
156 extern void _Py_DumpExtensionModules(int fd, PyInterpreterState *interp);
157 extern PyObject* _Py_CalculateSuggestions(PyObject *dir, PyObject *name);
158 extern PyObject* _Py_Offer_Suggestions(PyObject* exception);
159 
160 // Export for '_testinternalcapi' shared extension
161 PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b,
162                                           Py_ssize_t max_cost);
163 
164 void _PyErr_FormatNote(const char *format, ...);
165 
166 /* Context manipulation (PEP 3134) */
167 
168 Py_DEPRECATED(3.12) extern void _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
169 
170 // implementation detail for the codeop module.
171 // Exported for test.test_peg_generator.test_c_parser
172 PyAPI_DATA(PyTypeObject) _PyExc_IncompleteInputError;
173 #define PyExc_IncompleteInputError ((PyObject *)(&_PyExc_IncompleteInputError))
174 
175 #ifdef __cplusplus
176 }
177 #endif
178 #endif /* !Py_INTERNAL_PYERRORS_H */
179