#include "osdefs.h" // MAXPATHLEN
+#define _PyModule_CAST(op) \
+ (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
+
+
static PyMemberDef module_members[] = {
{"__dict__", _Py_T_OBJECT, offsetof(PyModuleObject, md_dict), Py_READONLY},
{0}
return NULL;
}
name = _PyImport_ResolveNameWithPackageContext(name);
- if ((m = (PyModuleObject*)PyModule_New(name)) == NULL)
+
+ m = (PyModuleObject*)PyModule_New(name);
+ if (m == NULL)
return NULL;
if (module->m_size > 0) {
}
static void
-module_dealloc(PyModuleObject *m)
+module_dealloc(PyObject *self)
{
- int verbose = _Py_GetConfig()->verbose;
+ PyModuleObject *m = _PyModule_CAST(self);
PyObject_GC_UnTrack(m);
+
+ int verbose = _Py_GetConfig()->verbose;
if (verbose && m->md_name) {
PySys_FormatStderr("# destroy %U\n", m->md_name);
}
if (m->md_weaklist != NULL)
PyObject_ClearWeakRefs((PyObject *) m);
+
/* bpo-39824: Don't call m_free() if m_size > 0 and md_state=NULL */
if (m->md_def && m->md_def->m_free
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
{
m->md_def->m_free(m);
}
+
Py_XDECREF(m->md_dict);
Py_XDECREF(m->md_name);
if (m->md_state != NULL)
}
static PyObject *
-module_repr(PyModuleObject *m)
+module_repr(PyObject *self)
{
+ PyModuleObject *m = _PyModule_CAST(self);
PyInterpreterState *interp = _PyInterpreterState_GET();
return _PyImport_ImportlibModuleRepr(interp, (PyObject *)m);
}
PyObject*
-_Py_module_getattro(PyModuleObject *m, PyObject *name)
+_Py_module_getattro(PyObject *self, PyObject *name)
{
+ PyModuleObject *m = _PyModule_CAST(self);
return _Py_module_getattro_impl(m, name, 0);
}
static int
-module_traverse(PyModuleObject *m, visitproc visit, void *arg)
+module_traverse(PyObject *self, visitproc visit, void *arg)
{
+ PyModuleObject *m = _PyModule_CAST(self);
+
/* bpo-39824: Don't call m_traverse() if m_size > 0 and md_state=NULL */
if (m->md_def && m->md_def->m_traverse
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
if (res)
return res;
}
+
Py_VISIT(m->md_dict);
return 0;
}
static int
-module_clear(PyModuleObject *m)
+module_clear(PyObject *self)
{
+ PyModuleObject *m = _PyModule_CAST(self);
+
/* bpo-39824: Don't call m_clear() if m_size > 0 and md_state=NULL */
if (m->md_def && m->md_def->m_clear
&& (m->md_def->m_size <= 0 || m->md_state != NULL))
}
static PyObject *
-module_get_annotate(PyModuleObject *m, void *Py_UNUSED(ignored))
+module_get_annotate(PyObject *self, void *Py_UNUSED(ignored))
{
+ PyModuleObject *m = _PyModule_CAST(self);
+
PyObject *dict = module_get_dict(m);
if (dict == NULL) {
return NULL;
}
static int
-module_set_annotate(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored))
+module_set_annotate(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
{
+ PyModuleObject *m = _PyModule_CAST(self);
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "cannot delete __annotate__ attribute");
return -1;
}
+
PyObject *dict = module_get_dict(m);
if (dict == NULL) {
return -1;
}
static PyObject *
-module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored))
+module_get_annotations(PyObject *self, void *Py_UNUSED(ignored))
{
+ PyModuleObject *m = _PyModule_CAST(self);
+
PyObject *dict = module_get_dict(m);
if (dict == NULL) {
return NULL;
}
static int
-module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored))
+module_set_annotations(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
{
- int ret = -1;
+ PyModuleObject *m = _PyModule_CAST(self);
+
PyObject *dict = module_get_dict(m);
if (dict == NULL) {
return -1;
}
+ int ret = -1;
if (value != NULL) {
/* set */
ret = PyDict_SetItem(dict, &_Py_ID(__annotations__), value);
static PyGetSetDef module_getsets[] = {
- {"__annotations__", (getter)module_get_annotations, (setter)module_set_annotations},
- {"__annotate__", (getter)module_get_annotate, (setter)module_set_annotate},
+ {"__annotations__", module_get_annotations, module_set_annotations},
+ {"__annotate__", module_get_annotate, module_set_annotate},
{NULL}
};
"module", /* tp_name */
sizeof(PyModuleObject), /* tp_basicsize */
0, /* tp_itemsize */
- (destructor)module_dealloc, /* tp_dealloc */
+ module_dealloc, /* tp_dealloc */
0, /* tp_vectorcall_offset */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_as_async */
- (reprfunc)module_repr, /* tp_repr */
+ module_repr, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
- (getattrofunc)_Py_module_getattro, /* tp_getattro */
+ _Py_module_getattro, /* tp_getattro */
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_BASETYPE, /* tp_flags */
module___init____doc__, /* tp_doc */
- (traverseproc)module_traverse, /* tp_traverse */
- (inquiry)module_clear, /* tp_clear */
+ module_traverse, /* tp_traverse */
+ module_clear, /* tp_clear */
0, /* tp_richcompare */
offsetof(PyModuleObject, md_weaklist), /* tp_weaklistoffset */
0, /* tp_iter */