summaryrefslogtreecommitdiffstats
path: root/Include/internal/pycore_pyerrors.h
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-05-24 15:01:38 (GMT)
committerGitHub <noreply@github.com>2019-05-24 15:01:38 (GMT)
commit438a12dd9d85f463c0bb7bf1505cd87b98b98170 (patch)
tree98c86409bb8fdfca0c58588f2b9475d25579057e /Include/internal/pycore_pyerrors.h
parent13d4e6a4a090031f8214e058ed3c8fd47767e05f (diff)
downloadcpython-438a12dd9d85f463c0bb7bf1505cd87b98b98170.zip
cpython-438a12dd9d85f463c0bb7bf1505cd87b98b98170.tar.gz
cpython-438a12dd9d85f463c0bb7bf1505cd87b98b98170.tar.bz2
bpo-36710: Add tstate parameter in ceval.c (GH-13547)
* Fix a possible reference leak in _PyErr_Print() if exception is NULL. * PyErr_BadInternalCall(): replace PyErr_Format() with _PyErr_SetString(). * Add pycore_pyerrors.h header file. * New functions: * _PyErr_Clear() * _PyErr_Fetch() * _PyErr_Print() * _PyErr_Restore() * _PyErr_SetObject() * _PyErr_SetString() * Add 'tstate' parameter to _PyEval_AddPendingCall().
Diffstat (limited to 'Include/internal/pycore_pyerrors.h')
-rw-r--r--Include/internal/pycore_pyerrors.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h
new file mode 100644
index 0000000..23327ef
--- /dev/null
+++ b/Include/internal/pycore_pyerrors.h
@@ -0,0 +1,62 @@
+#ifndef Py_INTERNAL_PYERRORS_H
+#define Py_INTERNAL_PYERRORS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
+{
+ return tstate == NULL ? NULL : tstate->curexc_type;
+}
+
+
+PyAPI_FUNC(void) _PyErr_Fetch(
+ PyThreadState *tstate,
+ PyObject **type,
+ PyObject **value,
+ PyObject **traceback);
+
+PyAPI_FUNC(int) _PyErr_ExceptionMatches(
+ PyThreadState *tstate,
+ PyObject *exc);
+
+PyAPI_FUNC(void) _PyErr_Restore(
+ PyThreadState *tstate,
+ PyObject *type,
+ PyObject *value,
+ PyObject *traceback);
+
+PyAPI_FUNC(void) _PyErr_SetObject(
+ PyThreadState *tstate,
+ PyObject *type,
+ PyObject *value);
+
+PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
+
+PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
+
+PyAPI_FUNC(void) _PyErr_SetString(
+ PyThreadState *tstate,
+ PyObject *exception,
+ const char *string);
+
+PyAPI_FUNC(PyObject *) _PyErr_Format(
+ PyThreadState *tstate,
+ PyObject *exception,
+ const char *format,
+ ...);
+
+PyAPI_FUNC(void) _PyErr_NormalizeException(
+ PyThreadState *tstate,
+ PyObject **exc,
+ PyObject **val,
+ PyObject **tb);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_PYERRORS_H */