summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-04-21 22:52:52 (GMT)
committerGitHub <noreply@github.com>2021-04-21 22:52:52 (GMT)
commitcdad2724e6f7426372901cc5dedd8a462ba046a6 (patch)
treeca6a34bfdc6c05ea86d2ff2686ebd116750b2305 /Modules
parenta32f8fe7133aad4f3cf8946534e3b79a5f2659da (diff)
downloadcpython-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/Setup12
-rw-r--r--Modules/_abc.c3
-rw-r--r--Modules/_functoolsmodule.c6
-rw-r--r--Modules/_operator.c5
-rw-r--r--Modules/_pickle.c3
-rw-r--r--Modules/_queuemodule.c3
-rw-r--r--Modules/_randommodule.c5
-rw-r--r--Modules/_sre.c3
-rw-r--r--Modules/_struct.c3
-rw-r--r--Modules/_threadmodule.c5
-rw-r--r--Modules/_winapi.c4
-rw-r--r--Modules/arraymodule.c3
-rw-r--r--Modules/posixmodule.c3
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;
}