diff options
author | Victor Stinner <vstinner@python.org> | 2021-04-21 22:52:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-21 22:52:52 (GMT) |
commit | cdad2724e6f7426372901cc5dedd8a462ba046a6 (patch) | |
tree | ca6a34bfdc6c05ea86d2ff2686ebd116750b2305 /Modules | |
parent | a32f8fe7133aad4f3cf8946534e3b79a5f2659da (diff) | |
download | cpython-cdad2724e6f7426372901cc5dedd8a462ba046a6.zip cpython-cdad2724e6f7426372901cc5dedd8a462ba046a6.tar.gz cpython-cdad2724e6f7426372901cc5dedd8a462ba046a6.tar.bz2 |
bpo-40137: Add pycore_moduleobject.h internal header (GH-25507)
Add pycore_moduleobject.h internal header file with static inline
functions to access module members:
* _PyModule_GetDict()
* _PyModule_GetDef()
* _PyModule_GetState()
These functions don't check at runtime if their argument has a valid
type and can be inlined even if Python is not built with LTO.
_PyType_GetModuleByDef() uses _PyModule_GetDef().
Replace PyModule_GetState() with _PyModule_GetState() in the
extension modules, considered as performance sensitive:
* _abc
* _functools
* _operator
* _pickle
* _queue
* _random
* _sre
* _struct
* _thread
* _winapi
* array
* posix
The following extensions are now built with the Py_BUILD_CORE_MODULE
macro defined, to be able to use the internal pycore_moduleobject.h
header: _abc, array, _operator, _queue, _sre, _struct.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/Setup | 12 | ||||
-rw-r--r-- | Modules/_abc.c | 3 | ||||
-rw-r--r-- | Modules/_functoolsmodule.c | 6 | ||||
-rw-r--r-- | Modules/_operator.c | 5 | ||||
-rw-r--r-- | Modules/_pickle.c | 3 | ||||
-rw-r--r-- | Modules/_queuemodule.c | 3 | ||||
-rw-r--r-- | Modules/_randommodule.c | 5 | ||||
-rw-r--r-- | Modules/_sre.c | 3 | ||||
-rw-r--r-- | Modules/_struct.c | 3 | ||||
-rw-r--r-- | Modules/_threadmodule.c | 5 | ||||
-rw-r--r-- | Modules/_winapi.c | 4 | ||||
-rw-r--r-- | Modules/arraymodule.c | 3 | ||||
-rw-r--r-- | Modules/posixmodule.c | 3 |
13 files changed, 33 insertions, 25 deletions
diff --git a/Modules/Setup b/Modules/Setup index cce7858..87c6a15 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -105,13 +105,13 @@ posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix errno errnomodule.c # posix (UNIX) errno values pwd pwdmodule.c # this is needed to find out the user's home dir # if $HOME is not set -_sre _sre.c # Fredrik Lundh's new regular expressions +_sre -DPy_BUILD_CORE_BUILTIN _sre.c # Fredrik Lundh's new regular expressions _codecs _codecsmodule.c # access to the builtin codecs and codec registry _weakref _weakref.c # weak references _functools -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _functoolsmodule.c # Tools for working with functions and callable objects -_operator _operator.c # operator.add() and similar goodies +_operator -DPy_BUILD_CORE_BUILTIN _operator.c # operator.add() and similar goodies _collections _collectionsmodule.c # Container types -_abc _abc.c # Abstract base classes +_abc -DPy_BUILD_CORE_BUILTIN _abc.c # Abstract base classes itertools itertoolsmodule.c # Functions creating iterators for efficient looping atexit atexitmodule.c # Register functions to be run at interpreter-shutdown _signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c @@ -166,17 +166,17 @@ _symtable symtablemodule.c # Modules that should always be present (non UNIX dependent): -#array arraymodule.c # array objects +#array -DPy_BUILD_CORE_MODULE arraymodule.c # array objects #cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions #math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin() #_contextvars _contextvarsmodule.c # Context Variables -#_struct _struct.c # binary structure packing/unpacking +#_struct -DPy_BUILD_CORE_MODULE _struct.c # binary structure packing/unpacking #_weakref _weakref.c # basic weak reference support #_testcapi _testcapimodule.c # Python C API test module #_testinternalcapi _testinternalcapi.c -I$(srcdir)/Include/internal -DPy_BUILD_CORE_MODULE # Python internal C API test module #_random _randommodule.c -DPy_BUILD_CORE_MODULE # Random number generator #_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator -#_pickle _pickle.c # pickle accelerator +#_pickle -DPy_BUILD_CORE_MODULE _pickle.c # pickle accelerator #_datetime _datetimemodule.c # datetime accelerator #_zoneinfo _zoneinfo.c -DPy_BUILD_CORE_MODULE # zoneinfo accelerator #_bisect _bisectmodule.c # Bisection algorithms diff --git a/Modules/_abc.c b/Modules/_abc.c index 7afaa75..0ddc2ab 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -1,6 +1,7 @@ /* ABCMeta implementation */ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "clinic/_abc.c.h" /*[clinic input] @@ -27,7 +28,7 @@ typedef struct { static inline _abcmodule_state* get_abc_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_abcmodule_state *)state; } diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index f3ae3b6..eea542e 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -1,5 +1,6 @@ #include "Python.h" #include "pycore_long.h" // _PyLong_GetZero() +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "pycore_object.h" // _PyObject_GC_TRACK #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_tuple.h" // _PyTuple_ITEMS() @@ -23,7 +24,7 @@ typedef struct _functools_state { static inline _functools_state * get_functools_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_functools_state *)state; } @@ -53,8 +54,7 @@ get_functools_state_by_type(PyTypeObject *type) if (module == NULL) { return NULL; } - _functools_state *state = get_functools_state(module); - return state; + return get_functools_state(module); } static PyObject * diff --git a/Modules/_operator.c b/Modules/_operator.c index da1e431..f55c2f1 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -1,6 +1,5 @@ - #include "Python.h" - +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "clinic/_operator.c.h" typedef struct { @@ -12,7 +11,7 @@ typedef struct { static inline _operator_state* get_operator_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_operator_state *)state; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 5a8aad9..691d4a2 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -9,6 +9,7 @@ #endif #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef PyDoc_STRVAR(pickle_module_doc, @@ -182,7 +183,7 @@ static struct PyModuleDef _picklemodule; static PickleState * _Pickle_GetState(PyObject *module) { - return (PickleState *)PyModule_GetState(module); + return (PickleState *)_PyModule_GetState(module); } /* Find the module instance imported in the currently running sub-interpreter diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index 7a52617..c27fb1a 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -1,4 +1,5 @@ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include <stddef.h> // offsetof() @@ -10,7 +11,7 @@ typedef struct { static simplequeue_state * simplequeue_get_state(PyObject *module) { - simplequeue_state *state = PyModule_GetState(module); + simplequeue_state *state = _PyModule_GetState(module); assert(state); return state; } diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index 99be69c..cae49a0 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -67,6 +67,7 @@ /* ---------------------------------------------------------------*/ #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #ifdef HAVE_PROCESS_H # include <process.h> // getpid() #endif @@ -86,7 +87,7 @@ typedef struct { static inline _randomstate* get_random_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_randomstate *)state; } @@ -538,7 +539,7 @@ random_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (PyTuple_GET_SIZE(args) == 1) arg = PyTuple_GET_ITEM(args, 0); - + tmp = random_seed(self, arg); if (tmp == NULL) { Py_DECREF(self); diff --git a/Modules/_sre.c b/Modules/_sre.c index 57faf7b..d4bfff6 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -42,6 +42,7 @@ static const char copyright[] = #include "Python.h" #include "pycore_long.h" // _PyLong_GetZero() +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include "sre.h" @@ -258,7 +259,7 @@ typedef struct { static _sremodulestate * get_sre_module_state(PyObject *m) { - _sremodulestate *state = (_sremodulestate *)PyModule_GetState(m); + _sremodulestate *state = (_sremodulestate *)_PyModule_GetState(m); assert(state); return state; } diff --git a/Modules/_struct.c b/Modules/_struct.c index 1a5e0ae..30ad9f2 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -6,6 +6,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include <ctype.h> @@ -24,7 +25,7 @@ typedef struct { static inline _structmodulestate* get_struct_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_structmodulestate *)state; } diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 0613dfd..7feb0b8 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -3,8 +3,9 @@ /* Interface to Sjoerd's portable C thread library */ #include "Python.h" -#include "pycore_pylifecycle.h" #include "pycore_interp.h" // _PyInterpreterState.num_threads +#include "pycore_moduleobject.h" // _PyModule_GetState() +#include "pycore_pylifecycle.h" #include "pycore_pystate.h" // _PyThreadState_Init() #include <stddef.h> // offsetof() #include "structmember.h" // PyMemberDef @@ -35,7 +36,7 @@ typedef struct { static inline thread_module_state* get_thread_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (thread_module_state *)state; } diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 7ba1409..9d5a45a 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -35,7 +35,7 @@ /* See http://www.python.org/2.4/license for licensing details. */ #include "Python.h" -#include "moduleobject.h" // PyModuleDef_Slot +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef @@ -87,7 +87,7 @@ typedef struct { static inline WinApiState* winapi_get_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (WinApiState *)state; } diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index fb9ebbe..f532678 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -5,6 +5,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include <stddef.h> // offsetof() @@ -63,7 +64,7 @@ typedef struct { static array_state * get_array_state(PyObject *module) { - return (array_state *)PyModule_GetState(module); + return (array_state *)_PyModule_GetState(module); } #define find_array_state_by_type(tp) \ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 65e8d5e..8ce62c882 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -11,6 +11,7 @@ #include "Python.h" #include "pycore_fileutils.h" +#include "pycore_moduleobject.h" // _PyModule_GetState() #ifdef MS_WINDOWS /* include <windows.h> early to avoid conflict with pycore_condvar.h: @@ -994,7 +995,7 @@ typedef struct { static inline _posixstate* get_posix_state(PyObject *module) { - void *state = PyModule_GetState(module); + void *state = _PyModule_GetState(module); assert(state != NULL); return (_posixstate *)state; } |