--- /dev/null
+#ifndef Py_INTERNAL_MODULEOBJECT_H
+#define Py_INTERNAL_MODULEOBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+typedef struct {
+ PyObject_HEAD
+ PyObject *md_dict;
+ struct PyModuleDef *md_def;
+ void *md_state;
+ PyObject *md_weaklist;
+ // for logging purposes after md_dict is cleared
+ PyObject *md_name;
+} PyModuleObject;
+
+static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) {
+ assert(PyModule_Check(mod));
+ return ((PyModuleObject *)mod)->md_def;
+}
+
+static inline void* _PyModule_GetState(PyObject* mod) {
+ assert(PyModule_Check(mod));
+ return ((PyModuleObject *)mod)->md_state;
+}
+
+static inline PyObject* _PyModule_GetDict(PyObject *mod) {
+ assert(PyModule_Check(mod));
+ PyObject *dict = ((PyModuleObject *)mod) -> md_dict;
+ // _PyModule_GetDict(mod) must not be used after calling module_clear(mod)
+ assert(dict != NULL);
+ return dict;
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_MODULEOBJECT_H */
$(srcdir)/Include/internal/pycore_interp.h \
$(srcdir)/Include/internal/pycore_list.h \
$(srcdir)/Include/internal/pycore_long.h \
+ $(srcdir)/Include/internal/pycore_moduleobject.h \
$(srcdir)/Include/internal/pycore_object.h \
$(srcdir)/Include/internal/pycore_pathconfig.h \
$(srcdir)/Include/internal/pycore_pyarena.h \
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
# 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
/* ABCMeta implementation */
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "clinic/_abc.c.h"
/*[clinic input]
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;
}
#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()
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;
}
if (module == NULL) {
return NULL;
}
- _functools_state *state = get_functools_state(module);
- return state;
+ return get_functools_state(module);
}
static PyObject *
-
#include "Python.h"
-
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "clinic/_operator.c.h"
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;
}
#endif
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef
PyDoc_STRVAR(pickle_module_doc,
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
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef
#include <stddef.h> // offsetof()
static simplequeue_state *
simplequeue_get_state(PyObject *module)
{
- simplequeue_state *state = PyModule_GetState(module);
+ simplequeue_state *state = _PyModule_GetState(module);
assert(state);
return state;
}
/* ---------------------------------------------------------------*/
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#ifdef HAVE_PROCESS_H
# include <process.h> // getpid()
#endif
static inline _randomstate*
get_random_state(PyObject *module)
{
- void *state = PyModule_GetState(module);
+ void *state = _PyModule_GetState(module);
assert(state != NULL);
return (_randomstate *)state;
}
if (PyTuple_GET_SIZE(args) == 1)
arg = PyTuple_GET_ITEM(args, 0);
-
+
tmp = random_seed(self, arg);
if (tmp == NULL) {
Py_DECREF(self);
#include "Python.h"
#include "pycore_long.h" // _PyLong_GetZero()
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef
#include "sre.h"
static _sremodulestate *
get_sre_module_state(PyObject *m)
{
- _sremodulestate *state = (_sremodulestate *)PyModule_GetState(m);
+ _sremodulestate *state = (_sremodulestate *)_PyModule_GetState(m);
assert(state);
return state;
}
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef
#include <ctype.h>
static inline _structmodulestate*
get_struct_state(PyObject *module)
{
- void *state = PyModule_GetState(module);
+ void *state = _PyModule_GetState(module);
assert(state != NULL);
return (_structmodulestate *)state;
}
/* 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
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;
}
/* 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
static inline WinApiState*
winapi_get_state(PyObject *module)
{
- void *state = PyModule_GetState(module);
+ void *state = _PyModule_GetState(module);
assert(state != NULL);
return (WinApiState *)state;
}
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "structmember.h" // PyMemberDef
#include <stddef.h> // offsetof()
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) \
#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:
static inline _posixstate*
get_posix_state(PyObject *module)
{
- void *state = PyModule_GetState(module);
+ void *state = _PyModule_GetState(module);
assert(state != NULL);
return (_posixstate *)state;
}
#include "Python.h"
#include "pycore_ceval.h" // _PyEval_BuiltinsFromGlobals()
+#include "pycore_moduleobject.h" // _PyModule_GetDict()
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
#include "frameobject.h" // PyFrameObject
PyObject *builtins = _PyDict_GetItemIdWithError(globals, &PyId___builtins__);
if (builtins) {
if (PyModule_Check(builtins)) {
- builtins = PyModule_GetDict(builtins);
+ builtins = _PyModule_GetDict(builtins);
assert(builtins != NULL);
}
return builtins;
#include "Python.h"
#include "pycore_interp.h" // PyInterpreterState.importlib
#include "pycore_pystate.h" // _PyInterpreterState_GET()
+#include "pycore_moduleobject.h" // _PyModule_GetDef()
#include "structmember.h" // PyMemberDef
static Py_ssize_t max_module_number;
_Py_IDENTIFIER(__name__);
_Py_IDENTIFIER(__spec__);
-typedef struct {
- PyObject_HEAD
- PyObject *md_dict;
- struct PyModuleDef *md_def;
- void *md_state;
- PyObject *md_weaklist;
- PyObject *md_name; /* for logging purposes after md_dict is cleared */
-} PyModuleObject;
-
static PyMemberDef module_members[] = {
{"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
{0}
PyObject *
PyModule_GetDict(PyObject *m)
{
- PyObject *d;
if (!PyModule_Check(m)) {
PyErr_BadInternalCall();
return NULL;
}
- d = ((PyModuleObject *)m) -> md_dict;
- assert(d != NULL);
- return d;
+ return _PyModule_GetDict(m);
}
PyObject*
PyErr_BadArgument();
return NULL;
}
- return ((PyModuleObject *)m)->md_def;
+ return _PyModule_GetDef(m);
}
void*
PyErr_BadArgument();
return NULL;
}
- return ((PyModuleObject *)m)->md_state;
+ return _PyModule_GetState(m);
}
void
#include "pycore_call.h"
#include "pycore_compile.h" // _Py_Mangle()
#include "pycore_initconfig.h"
+#include "pycore_moduleobject.h" // _PyModule_GetDef()
#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pystate.h" // _PyThreadState_GET()
if (m == NULL) {
return NULL;
}
- return PyModule_GetState(m);
+ return _PyModule_GetState(m);
}
PyHeapTypeObject *ht = (PyHeapTypeObject*)super;
PyObject *module = ht->ht_module;
- if (module && PyModule_GetDef(module) == def) {
+ if (module && _PyModule_GetDef(module) == def) {
return module;
}
i++;
<ClInclude Include="..\Include\internal\pycore_interp.h" />
<ClInclude Include="..\Include\internal\pycore_list.h" />
<ClInclude Include="..\Include\internal\pycore_long.h" />
+ <ClInclude Include="..\Include\internal\pycore_moduleobject.h" />
<ClInclude Include="..\Include\internal\pycore_object.h" />
<ClInclude Include="..\Include\internal\pycore_pathconfig.h" />
<ClInclude Include="..\Include\internal\pycore_pyarena.h" />
<ClInclude Include="..\Include\internal\pycore_long.h">
<Filter>Include\internal</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\internal\pycore_moduleobject.h">
+ <Filter>Include\internal</Filter>
+ </ClInclude>
<ClInclude Include="..\Include\internal\pycore_object.h">
<Filter>Include\internal</Filter>
</ClInclude>
#
# array objects
- self.add(Extension('array', ['arraymodule.c']))
+ self.add(Extension('array', ['arraymodule.c'],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# Context Variables
self.add(Extension('_contextvars', ['_contextvarsmodule.c']))
self.add(Extension("_asyncio", ["_asynciomodule.c"],
extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# _abc speedups
- self.add(Extension("_abc", ["_abc.c"]))
+ self.add(Extension("_abc", ["_abc.c"],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# _queue module
- self.add(Extension("_queue", ["_queuemodule.c"]))
+ self.add(Extension("_queue", ["_queuemodule.c"],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# _statistics module
self.add(Extension("_statistics", ["_statisticsmodule.c"]))
'install_lib': PyBuildInstallLib},
# The struct module is defined here, because build_ext won't be
# called unless there's at least one extension module defined.
- ext_modules=[Extension('_struct', ['_struct.c'])],
+ ext_modules=[Extension('_struct', ['_struct.c'],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE'])],
# If you change the scripts installed here, you also need to
# check the PyBuildScripts command above, and change the links