summaryrefslogtreecommitdiffstats
path: root/Python/crossinterp.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/crossinterp.c')
-rw-r--r--Python/crossinterp.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/Python/crossinterp.c b/Python/crossinterp.c
index f74fee3..a31b5ef 100644
--- a/Python/crossinterp.c
+++ b/Python/crossinterp.c
@@ -12,6 +12,53 @@
#include "pycore_weakref.h" // _PyWeakref_GET_REF()
+/**************/
+/* exceptions */
+/**************/
+
+/* InterpreterError extends Exception */
+
+static PyTypeObject _PyExc_InterpreterError = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "InterpreterError",
+ .tp_doc = PyDoc_STR("An interpreter was not found."),
+ //.tp_base = (PyTypeObject *)PyExc_BaseException,
+};
+PyObject *PyExc_InterpreterError = (PyObject *)&_PyExc_InterpreterError;
+
+/* InterpreterNotFoundError extends InterpreterError */
+
+static PyTypeObject _PyExc_InterpreterNotFoundError = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "InterpreterNotFoundError",
+ .tp_doc = PyDoc_STR("An interpreter was not found."),
+ .tp_base = &_PyExc_InterpreterError,
+};
+PyObject *PyExc_InterpreterNotFoundError = (PyObject *)&_PyExc_InterpreterNotFoundError;
+
+/* lifecycle */
+
+static int
+init_exceptions(PyInterpreterState *interp)
+{
+ _PyExc_InterpreterError.tp_base = (PyTypeObject *)PyExc_BaseException;
+ if (_PyStaticType_InitBuiltin(interp, &_PyExc_InterpreterError) < 0) {
+ return -1;
+ }
+ if (_PyStaticType_InitBuiltin(interp, &_PyExc_InterpreterNotFoundError) < 0) {
+ return -1;
+ }
+ return 0;
+}
+
+static void
+fini_exceptions(PyInterpreterState *interp)
+{
+ _PyStaticType_Dealloc(interp, &_PyExc_InterpreterNotFoundError);
+ _PyStaticType_Dealloc(interp, &_PyExc_InterpreterError);
+}
+
+
/***************************/
/* cross-interpreter calls */
/***************************/
@@ -2099,3 +2146,18 @@ _PyXI_Fini(PyInterpreterState *interp)
_xidregistry_fini(_get_global_xidregistry(interp->runtime));
}
}
+
+PyStatus
+_PyXI_InitTypes(PyInterpreterState *interp)
+{
+ if (init_exceptions(interp) < 0) {
+ return _PyStatus_ERR("failed to initialize an exception type");
+ }
+ return _PyStatus_OK();
+}
+
+void
+_PyXI_FiniTypes(PyInterpreterState *interp)
+{
+ fini_exceptions(interp);
+}