summaryrefslogtreecommitdiffstats
path: root/Modules/_typingmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_typingmodule.c')
-rw-r--r--Modules/_typingmodule.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/Modules/_typingmodule.c b/Modules/_typingmodule.c
index 6428637..ed2999c 100644
--- a/Modules/_typingmodule.c
+++ b/Modules/_typingmodule.c
@@ -1,6 +1,11 @@
/* typing accelerator C extension: _typing module. */
+#ifndef Py_BUILD_CORE
+#define Py_BUILD_CORE
+#endif
+
#include "Python.h"
+#include "internal/pycore_interp.h"
#include "clinic/_typingmodule.c.h"
/*[clinic input]
@@ -35,7 +40,30 @@ static PyMethodDef typing_methods[] = {
PyDoc_STRVAR(typing_doc,
"Accelerators for the typing module.\n");
+static int
+_typing_exec(PyObject *m)
+{
+ PyInterpreterState *interp = PyInterpreterState_Get();
+
+#define EXPORT_TYPE(name, typename) \
+ if (PyModule_AddObjectRef(m, name, \
+ (PyObject *)interp->cached_objects.typename) < 0) { \
+ return -1; \
+ }
+
+ EXPORT_TYPE("TypeVar", typevar_type);
+ EXPORT_TYPE("TypeVarTuple", typevartuple_type);
+ EXPORT_TYPE("ParamSpec", paramspec_type);
+ EXPORT_TYPE("ParamSpecArgs", paramspecargs_type);
+ EXPORT_TYPE("ParamSpecKwargs", paramspeckwargs_type);
+ EXPORT_TYPE("TypeAliasType", typealias_type);
+ EXPORT_TYPE("Generic", generic_type);
+#undef EXPORT_TYPE
+ return 0;
+}
+
static struct PyModuleDef_Slot _typingmodule_slots[] = {
+ {Py_mod_exec, _typing_exec},
{Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
{0, NULL}
};