mirror of
https://github.com/python/cpython.git
synced 2025-08-28 12:45:07 +00:00
gh-76785: Crossinterp utils additions (gh-111530)
This moves several general internal APIs out of _xxsubinterpretersmodule.c and into the new Python/crossinterp.c (and the corresponding internal headers). Specifically: * _Py_excinfo, etc.: the initial implementation for non-object exception snapshots (in pycore_pyerrors.h and Python/errors.c) * _PyXI_exception_info, etc.: helpers for passing an exception beween interpreters (wraps _Py_excinfo) * _PyXI_namespace, etc.: helpers for copying a dict of attrs between interpreters * _PyXI_Enter(), _PyXI_Exit(): functions that abstract out the transitions between one interpreter and a second that will do some work temporarily Again, these were all abstracted out of _xxsubinterpretersmodule.c as generalizations. I plan on proposing these as public API at some point.
This commit is contained in:
parent
cde1071b2a
commit
9322ce90ac
11 changed files with 1309 additions and 472 deletions
|
@ -68,6 +68,30 @@ extern PyStatus _PyErr_InitTypes(PyInterpreterState *);
|
|||
extern void _PyErr_FiniTypes(PyInterpreterState *);
|
||||
|
||||
|
||||
/* exception snapshots */
|
||||
|
||||
// Ultimately we'd like to preserve enough information about the
|
||||
// exception and traceback that we could re-constitute (or at least
|
||||
// simulate, a la traceback.TracebackException), and even chain, a copy
|
||||
// of the exception in the calling interpreter.
|
||||
|
||||
typedef struct _excinfo {
|
||||
const char *type;
|
||||
const char *msg;
|
||||
} _Py_excinfo;
|
||||
|
||||
extern void _Py_excinfo_Clear(_Py_excinfo *info);
|
||||
extern int _Py_excinfo_Copy(_Py_excinfo *dest, _Py_excinfo *src);
|
||||
extern const char * _Py_excinfo_InitFromException(
|
||||
_Py_excinfo *info,
|
||||
PyObject *exc);
|
||||
extern void _Py_excinfo_Apply(_Py_excinfo *info, PyObject *exctype);
|
||||
extern const char * _Py_excinfo_AsUTF8(
|
||||
_Py_excinfo *info,
|
||||
char *buf,
|
||||
size_t bufsize);
|
||||
|
||||
|
||||
/* other API */
|
||||
|
||||
static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue