From 7adc776ea6ab808a4bf8fbf2740bb3bb9a7928a4 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Tue, 8 Apr 2008 22:07:05 +0000 Subject: Issue 2408: remove the _types module It was only used as a helper in types.py to access types (GetSetDescriptorType and MemberDescriptorType), when they can easily be obtained with python code. These expressions even work with Jython. I don't know what the future of the types module is; (cf. discussion in http://bugs.python.org/issue1605 ) at least this change makes it simpler. --- Doc/library/types.rst | 18 +++++---- Lib/types.py | 14 ++----- Makefile.pre.in | 2 - Modules/_typesmodule.c | 93 ---------------------------------------------- Modules/config.c.in | 4 -- PC/VC6/pythoncore.dsp | 4 -- PC/VS7.1/pythoncore.vcproj | 3 -- PC/VS8.0/pythoncore.vcproj | 4 -- PC/config.c | 3 -- PCbuild/pythoncore.vcproj | 4 -- 10 files changed, 13 insertions(+), 136 deletions(-) delete mode 100644 Modules/_typesmodule.c diff --git a/Doc/library/types.rst b/Doc/library/types.rst index b5e3830..6c90ec9 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -233,20 +233,22 @@ The module defines the following names: .. data:: GetSetDescriptorType - The type of objects defined in extension modules with ``PyGetSetDef``, such as - ``FrameType.f_locals`` or ``array.array.typecode``. This constant is not - defined in implementations of Python that do not have such extension types, so - for portable code use ``hasattr(types, 'GetSetDescriptorType')``. + The type of objects defined in extension modules with ``PyGetSetDef``, such + as ``FrameType.f_locals`` or ``array.array.typecode``. This type is used as + descriptor for object attributes; it has the same purpose as the + :class:`property` type, but for classes defined in extension modules. .. versionadded:: 2.5 .. data:: MemberDescriptorType - The type of objects defined in extension modules with ``PyMemberDef``, such as - ``datetime.timedelta.days``. This constant is not defined in implementations of - Python that do not have such extension types, so for portable code use - ``hasattr(types, 'MemberDescriptorType')``. + The type of objects defined in extension modules with ``PyMemberDef``, such + as ``datetime.timedelta.days``. This type is used as descriptor for simple C + data members which use standard conversion functions; it has the same purpose + as the :class:`property` type, but for classes defined in extension modules. + In other implementations of Python, this type may be identical to + ``GetSetDescriptorType``. .. versionadded:: 2.5 diff --git a/Lib/types.py b/Lib/types.py index 6c8c2b2..ea316fa 100644 --- a/Lib/types.py +++ b/Lib/types.py @@ -86,16 +86,8 @@ EllipsisType = type(Ellipsis) DictProxyType = type(TypeType.__dict__) NotImplementedType = type(NotImplemented) -# Extension types defined in a C helper module. XXX There may be no -# equivalent in implementations other than CPython, so it seems better to -# leave them undefined then to set them to e.g. None. -try: - import _types -except ImportError: - pass -else: - GetSetDescriptorType = type(_types.Helper.getter) - MemberDescriptorType = type(_types.Helper.member) - del _types +# For Jython, the following two types are identical +GetSetDescriptorType = type(FunctionType.func_code) +MemberDescriptorType = type(FunctionType.func_globals) del sys, _f, _g, _C, _x # Not for export diff --git a/Makefile.pre.in b/Makefile.pre.in index acf060f..af16d89 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -333,7 +333,6 @@ OBJECT_OBJS= \ ########################################################################## # objects that get linked into the Python library LIBRARY_OBJS= \ - Modules/_typesmodule.o \ Modules/getbuildinfo.o \ $(PARSER_OBJS) \ $(OBJECT_OBJS) \ @@ -371,7 +370,6 @@ sharedmods: $(BUILDPYTHON) $(LIBRARY): $(LIBRARY_OBJS) -rm -f $@ $(AR) cr $@ Modules/getbuildinfo.o - $(AR) cr $@ Modules/_typesmodule.o $(AR) cr $@ $(PARSER_OBJS) $(AR) cr $@ $(OBJECT_OBJS) $(AR) cr $@ $(PYTHON_OBJS) diff --git a/Modules/_typesmodule.c b/Modules/_typesmodule.c deleted file mode 100644 index e925664..0000000 --- a/Modules/_typesmodule.c +++ /dev/null @@ -1,93 +0,0 @@ -/* This extension module exposes some types that are only available at the - * C level. It should not be used directly, but instead through the Python - * level types modules, which imports this. - */ - -#include "Python.h" -#include "structmember.h" - -typedef struct -{ - PyObject_HEAD - int member; -} Helper; - -static PyMemberDef helper_members[] = { - { "member", T_INT, offsetof(Helper, member), READONLY, - PyDoc_STR("A member descriptor") - }, - { NULL } -}; - -static PyObject * -helper_getter(Helper *self, void *unused) -{ - Py_RETURN_NONE; -} - -static PyGetSetDef helper_getset[] = { - { "getter", (getter)helper_getter, NULL, - PyDoc_STR("A getset descriptor"), - }, - { NULL } -}; - -static PyTypeObject HelperType = { - PyVarObject_HEAD_INIT(NULL, 0) - "_types.Helper", /* tp_name */ - sizeof(Helper), /* tp_basicsize */ - 0, /* tp_itemsize */ - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - helper_members, /* tp_members */ - helper_getset, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ -}; - -PyMODINIT_FUNC -init_types(void) -{ - PyObject *m; - - m = Py_InitModule3("_types", NULL, "A types module helper"); - if (!m) - return; - - if (PyType_Ready(&HelperType) < 0) - return; - - Py_INCREF(&HelperType); - PyModule_AddObject(m, "Helper", (PyObject *)&HelperType); -} - - diff --git a/Modules/config.c.in b/Modules/config.c.in index 1ef1e66..f811991 100644 --- a/Modules/config.c.in +++ b/Modules/config.c.in @@ -28,7 +28,6 @@ extern void PyMarshal_Init(void); extern void initimp(void); extern void initgc(void); extern void init_ast(void); -extern void init_types(void); struct _inittab _PyImport_Inittab[] = { @@ -43,9 +42,6 @@ struct _inittab _PyImport_Inittab[] = { /* This lives in Python/Python-ast.c */ {"_ast", init_ast}, - /* This lives in Modules/_typesmodule.c */ - {"_types", init_types}, - /* These entries are here for sys.builtin_module_names */ {"__main__", NULL}, {"__builtin__", NULL}, diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp index 7c929ef..adcef6a 100644 --- a/PC/VC6/pythoncore.dsp +++ b/PC/VC6/pythoncore.dsp @@ -173,10 +173,6 @@ SOURCE=..\..\PC\_subprocess.c # End Source File # Begin Source File -SOURCE=..\..\Modules\_typesmodule.c -# End Source File -# Begin Source File - SOURCE=..\..\Modules\_weakref.c # End Source File # Begin Source File diff --git a/PC/VS7.1/pythoncore.vcproj b/PC/VS7.1/pythoncore.vcproj index 5e84783..3a20a41 100644 --- a/PC/VS7.1/pythoncore.vcproj +++ b/PC/VS7.1/pythoncore.vcproj @@ -398,9 +398,6 @@ RelativePath="..\..\Pc\_subprocess.c"> - - - - diff --git a/PC/config.c b/PC/config.c index 816edca..9cce923 100644 --- a/PC/config.c +++ b/PC/config.c @@ -66,7 +66,6 @@ extern void init_codecs_tw(void); extern void init_subprocess(void); extern void init_lsprof(void); extern void init_ast(void); -extern void init_types(void); /* tools/freeze/makeconfig.py marker for additional "extern" */ /* -- ADDMODULE MARKER 1 -- */ @@ -161,8 +160,6 @@ struct _inittab _PyImport_Inittab[] = { {"sys", NULL}, {"exceptions", NULL}, - {"_types", init_types}, - /* Sentinel */ {0, 0} }; diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj index 9683bd1..a75c48e 100644 --- a/PCbuild/pythoncore.vcproj +++ b/PCbuild/pythoncore.vcproj @@ -1023,10 +1023,6 @@ > - - -- cgit v0.12