Define names for built-in types that aren't directly accessible as a builtin.
"""
-import sys
+import _types
# Iterators in Python aren't a matter of type but of protocol. A large
# and changing number of builtin types implement *some* flavor of
LambdaType = type(lambda: None) # Same as FunctionType
CodeType = type(_f.__code__)
MappingProxyType = type(type.__dict__)
-SimpleNamespace = type(sys.implementation)
+SimpleNamespace = _types.SimpleNamespace
def _cell_factory():
a = 1
MethodDescriptorType = type(str.join)
ClassMethodDescriptorType = type(dict.__dict__['fromkeys'])
-ModuleType = type(sys)
+ModuleType = type(_types)
try:
raise TypeError
GetSetDescriptorType = type(FunctionType.__code__)
MemberDescriptorType = type(FunctionType.__globals__)
-del sys, _f, _g, _C, _c, _ag, _cell_factory # Not for export
+CapsuleType = _types.CapsuleType
+
+del _types, _f, _g, _C, _c, _ag, _cell_factory # Not for export
# Provide a PEP 3115 compliant mechanism for class creation
NoneType = type(None)
NotImplementedType = type(NotImplemented)
-def __getattr__(name):
- if name == 'CapsuleType':
- import _socket
- return type(_socket.CAPI)
- raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
-
-__all__ = [n for n in globals() if n[:1] != '_']
-__all__ += ['CapsuleType']
+__all__ = [n for n in globals() if not n.startswith('_')] # for pydoc
#_socket socketmodule.c
#_statistics _statisticsmodule.c
#_struct _struct.c
+#_types _typesmodule.c
#_typing _typingmodule.c
#_zoneinfo _zoneinfo.c
#array arraymodule.c
_sysconfig _sysconfig.c
_thread _threadmodule.c
time timemodule.c
+_types _typesmodule.c
_typing _typingmodule.c
_weakref _weakref.c
--- /dev/null
+/* _types module */
+
+#include "Python.h"
+#include "pycore_namespace.h" // _PyNamespace_Type
+
+static int
+_types_exec(PyObject *m)
+{
+ if (PyModule_AddObjectRef(m, "CapsuleType", (PyObject *)&PyCapsule_Type) < 0) {
+ return -1;
+ }
+ if (PyModule_AddObjectRef(m, "SimpleNamespace", (PyObject *)&_PyNamespace_Type) < 0) {
+ return -1;
+ }
+ return 0;
+}
+
+static struct PyModuleDef_Slot _typesmodule_slots[] = {
+ {Py_mod_exec, _types_exec},
+ {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},
+ {Py_mod_gil, Py_MOD_GIL_NOT_USED},
+ {0, NULL}
+};
+
+static struct PyModuleDef typesmodule = {
+ .m_base = PyModuleDef_HEAD_INIT,
+ .m_name = "_types",
+ .m_doc = "Define names for built-in types.",
+ .m_size = 0,
+ .m_slots = _typesmodule_slots,
+};
+
+PyMODINIT_FUNC
+PyInit__types(void)
+{
+ return PyModuleDef_Init(&typesmodule);
+}
extern PyObject* PyInit__signal(void);
extern PyObject* PyInit__statistics(void);
extern PyObject* PyInit__sysconfig(void);
+extern PyObject* PyInit__types(void);
extern PyObject* PyInit__typing(void);
extern PyObject* PyInit_time(void);
extern PyObject* PyInit__thread(void);
{"time", PyInit_time},
{"_thread", PyInit__thread},
{"_tokenize", PyInit__tokenize},
+ {"_types", PyInit__types},
{"_typing", PyInit__typing},
{"_statistics", PyInit__statistics},
<ClCompile Include="..\Modules\_sysconfig.c" />
<ClCompile Include="..\Modules\_threadmodule.c" />
<ClCompile Include="..\Modules\_tracemalloc.c" />
+ <ClCompile Include="..\Modules\_typesmodule.c" />
<ClCompile Include="..\Modules\_typingmodule.c" />
<ClCompile Include="..\Modules\timemodule.c" />
<ClCompile Include="..\Modules\xxsubtype.c" />
<ClCompile Include="..\Modules\_statisticsmodule.c">
<Filter>Modules</Filter>
</ClCompile>
+ <ClCompile Include="..\Modules\_typesmodule.c">
+ <Filter>Modules</Filter>
+ </ClCompile>
<ClCompile Include="..\Modules\_typingmodule.c">
<Filter>Modules</Filter>
</ClCompile>
"_tkinter",
"_tokenize",
"_tracemalloc",
+"_types",
"_typing",
"_uuid",
"_warnings",
MODULE__INTERPRETERS_TRUE
MODULE__TYPING_FALSE
MODULE__TYPING_TRUE
+MODULE__TYPES_FALSE
+MODULE__TYPES_TRUE
MODULE__STRUCT_FALSE
MODULE__STRUCT_TRUE
MODULE_SELECT_FALSE
+fi
+
+
+ if test "$py_cv_module__types" != "n/a"
+then :
+ py_cv_module__types=yes
+fi
+ if test "$py_cv_module__types" = yes; then
+ MODULE__TYPES_TRUE=
+ MODULE__TYPES_FALSE='#'
+else
+ MODULE__TYPES_TRUE='#'
+ MODULE__TYPES_FALSE=
+fi
+
+ as_fn_append MODULE_BLOCK "MODULE__TYPES_STATE=$py_cv_module__types$as_nl"
+ if test "x$py_cv_module__types" = xyes
+then :
+
+
+
+
fi
as_fn_error $? "conditional \"MODULE__STRUCT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${MODULE__TYPES_TRUE}" && test -z "${MODULE__TYPES_FALSE}"; then
+ as_fn_error $? "conditional \"MODULE__TYPES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${MODULE__TYPING_TRUE}" && test -z "${MODULE__TYPING_FALSE}"; then
as_fn_error $? "conditional \"MODULE__TYPING\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
PY_STDLIB_MOD_SIMPLE([_random])
PY_STDLIB_MOD_SIMPLE([select])
PY_STDLIB_MOD_SIMPLE([_struct])
+PY_STDLIB_MOD_SIMPLE([_types])
PY_STDLIB_MOD_SIMPLE([_typing])
PY_STDLIB_MOD_SIMPLE([_interpreters])
PY_STDLIB_MOD_SIMPLE([_interpchannels])