15
15
#include "osdefs.h" // MAXPATHLEN
16
16
17
17
18
+ #define _PyModule_CAST (op ) \
19
+ (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
20
+
21
+
18
22
static PyMemberDef module_members [] = {
19
23
{"__dict__" , _Py_T_OBJECT , offsetof(PyModuleObject , md_dict ), Py_READONLY },
20
24
{0 }
@@ -225,7 +229,9 @@ _PyModule_CreateInitialized(PyModuleDef* module, int module_api_version)
225
229
return NULL ;
226
230
}
227
231
name = _PyImport_ResolveNameWithPackageContext (name );
228
- if ((m = (PyModuleObject * )PyModule_New (name )) == NULL )
232
+
233
+ m = (PyModuleObject * )PyModule_New (name );
234
+ if (m == NULL )
229
235
return NULL ;
230
236
231
237
if (module -> m_size > 0 ) {
@@ -758,22 +764,26 @@ module___init___impl(PyModuleObject *self, PyObject *name, PyObject *doc)
758
764
}
759
765
760
766
static void
761
- module_dealloc (PyModuleObject * m )
767
+ module_dealloc (PyObject * self )
762
768
{
763
- int verbose = _Py_GetConfig () -> verbose ;
769
+ PyModuleObject * m = _PyModule_CAST ( self ) ;
764
770
765
771
PyObject_GC_UnTrack (m );
772
+
773
+ int verbose = _Py_GetConfig ()-> verbose ;
766
774
if (verbose && m -> md_name ) {
767
775
PySys_FormatStderr ("# destroy %U\n" , m -> md_name );
768
776
}
769
777
if (m -> md_weaklist != NULL )
770
778
PyObject_ClearWeakRefs ((PyObject * ) m );
779
+
771
780
/* bpo-39824: Don't call m_free() if m_size > 0 and md_state=NULL */
772
781
if (m -> md_def && m -> md_def -> m_free
773
782
&& (m -> md_def -> m_size <= 0 || m -> md_state != NULL ))
774
783
{
775
784
m -> md_def -> m_free (m );
776
785
}
786
+
777
787
Py_XDECREF (m -> md_dict );
778
788
Py_XDECREF (m -> md_name );
779
789
if (m -> md_state != NULL )
@@ -782,8 +792,9 @@ module_dealloc(PyModuleObject *m)
782
792
}
783
793
784
794
static PyObject *
785
- module_repr (PyModuleObject * m )
795
+ module_repr (PyObject * self )
786
796
{
797
+ PyModuleObject * m = _PyModule_CAST (self );
787
798
PyInterpreterState * interp = _PyInterpreterState_GET ();
788
799
return _PyImport_ImportlibModuleRepr (interp , (PyObject * )m );
789
800
}
@@ -1062,14 +1073,17 @@ _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress)
1062
1073
1063
1074
1064
1075
PyObject *
1065
- _Py_module_getattro (PyModuleObject * m , PyObject * name )
1076
+ _Py_module_getattro (PyObject * self , PyObject * name )
1066
1077
{
1078
+ PyModuleObject * m = _PyModule_CAST (self );
1067
1079
return _Py_module_getattro_impl (m , name , 0 );
1068
1080
}
1069
1081
1070
1082
static int
1071
- module_traverse (PyModuleObject * m , visitproc visit , void * arg )
1083
+ module_traverse (PyObject * self , visitproc visit , void * arg )
1072
1084
{
1085
+ PyModuleObject * m = _PyModule_CAST (self );
1086
+
1073
1087
/* bpo-39824: Don't call m_traverse() if m_size > 0 and md_state=NULL */
1074
1088
if (m -> md_def && m -> md_def -> m_traverse
1075
1089
&& (m -> md_def -> m_size <= 0 || m -> md_state != NULL ))
@@ -1078,13 +1092,16 @@ module_traverse(PyModuleObject *m, visitproc visit, void *arg)
1078
1092
if (res )
1079
1093
return res ;
1080
1094
}
1095
+
1081
1096
Py_VISIT (m -> md_dict );
1082
1097
return 0 ;
1083
1098
}
1084
1099
1085
1100
static int
1086
- module_clear (PyModuleObject * m )
1101
+ module_clear (PyObject * self )
1087
1102
{
1103
+ PyModuleObject * m = _PyModule_CAST (self );
1104
+
1088
1105
/* bpo-39824: Don't call m_clear() if m_size > 0 and md_state=NULL */
1089
1106
if (m -> md_def && m -> md_def -> m_clear
1090
1107
&& (m -> md_def -> m_size <= 0 || m -> md_state != NULL ))
@@ -1149,8 +1166,10 @@ module_get_dict(PyModuleObject *m)
1149
1166
}
1150
1167
1151
1168
static PyObject *
1152
- module_get_annotate (PyModuleObject * m , void * Py_UNUSED (ignored ))
1169
+ module_get_annotate (PyObject * self , void * Py_UNUSED (ignored ))
1153
1170
{
1171
+ PyModuleObject * m = _PyModule_CAST (self );
1172
+
1154
1173
PyObject * dict = module_get_dict (m );
1155
1174
if (dict == NULL ) {
1156
1175
return NULL ;
@@ -1168,12 +1187,14 @@ module_get_annotate(PyModuleObject *m, void *Py_UNUSED(ignored))
1168
1187
}
1169
1188
1170
1189
static int
1171
- module_set_annotate (PyModuleObject * m , PyObject * value , void * Py_UNUSED (ignored ))
1190
+ module_set_annotate (PyObject * self , PyObject * value , void * Py_UNUSED (ignored ))
1172
1191
{
1192
+ PyModuleObject * m = _PyModule_CAST (self );
1173
1193
if (value == NULL ) {
1174
1194
PyErr_SetString (PyExc_TypeError , "cannot delete __annotate__ attribute" );
1175
1195
return -1 ;
1176
1196
}
1197
+
1177
1198
PyObject * dict = module_get_dict (m );
1178
1199
if (dict == NULL ) {
1179
1200
return -1 ;
@@ -1200,8 +1221,10 @@ module_set_annotate(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignored)
1200
1221
}
1201
1222
1202
1223
static PyObject *
1203
- module_get_annotations (PyModuleObject * m , void * Py_UNUSED (ignored ))
1224
+ module_get_annotations (PyObject * self , void * Py_UNUSED (ignored ))
1204
1225
{
1226
+ PyModuleObject * m = _PyModule_CAST (self );
1227
+
1205
1228
PyObject * dict = module_get_dict (m );
1206
1229
if (dict == NULL ) {
1207
1230
return NULL ;
@@ -1249,14 +1272,16 @@ module_get_annotations(PyModuleObject *m, void *Py_UNUSED(ignored))
1249
1272
}
1250
1273
1251
1274
static int
1252
- module_set_annotations (PyModuleObject * m , PyObject * value , void * Py_UNUSED (ignored ))
1275
+ module_set_annotations (PyObject * self , PyObject * value , void * Py_UNUSED (ignored ))
1253
1276
{
1254
- int ret = -1 ;
1277
+ PyModuleObject * m = _PyModule_CAST (self );
1278
+
1255
1279
PyObject * dict = module_get_dict (m );
1256
1280
if (dict == NULL ) {
1257
1281
return -1 ;
1258
1282
}
1259
1283
1284
+ int ret = -1 ;
1260
1285
if (value != NULL ) {
1261
1286
/* set */
1262
1287
ret = PyDict_SetItem (dict , & _Py_ID (__annotations__ ), value );
@@ -1282,8 +1307,8 @@ module_set_annotations(PyModuleObject *m, PyObject *value, void *Py_UNUSED(ignor
1282
1307
1283
1308
1284
1309
static PyGetSetDef module_getsets [] = {
1285
- {"__annotations__" , ( getter ) module_get_annotations , ( setter ) module_set_annotations },
1286
- {"__annotate__" , ( getter ) module_get_annotate , ( setter ) module_set_annotate },
1310
+ {"__annotations__" , module_get_annotations , module_set_annotations },
1311
+ {"__annotate__" , module_get_annotate , module_set_annotate },
1287
1312
{NULL }
1288
1313
};
1289
1314
@@ -1292,26 +1317,26 @@ PyTypeObject PyModule_Type = {
1292
1317
"module" , /* tp_name */
1293
1318
sizeof (PyModuleObject ), /* tp_basicsize */
1294
1319
0 , /* tp_itemsize */
1295
- ( destructor ) module_dealloc , /* tp_dealloc */
1320
+ module_dealloc , /* tp_dealloc */
1296
1321
0 , /* tp_vectorcall_offset */
1297
1322
0 , /* tp_getattr */
1298
1323
0 , /* tp_setattr */
1299
1324
0 , /* tp_as_async */
1300
- ( reprfunc ) module_repr , /* tp_repr */
1325
+ module_repr , /* tp_repr */
1301
1326
0 , /* tp_as_number */
1302
1327
0 , /* tp_as_sequence */
1303
1328
0 , /* tp_as_mapping */
1304
1329
0 , /* tp_hash */
1305
1330
0 , /* tp_call */
1306
1331
0 , /* tp_str */
1307
- ( getattrofunc ) _Py_module_getattro , /* tp_getattro */
1332
+ _Py_module_getattro , /* tp_getattro */
1308
1333
PyObject_GenericSetAttr , /* tp_setattro */
1309
1334
0 , /* tp_as_buffer */
1310
1335
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1311
1336
Py_TPFLAGS_BASETYPE , /* tp_flags */
1312
1337
module___init____doc__ , /* tp_doc */
1313
- ( traverseproc ) module_traverse , /* tp_traverse */
1314
- ( inquiry ) module_clear , /* tp_clear */
1338
+ module_traverse , /* tp_traverse */
1339
+ module_clear , /* tp_clear */
1315
1340
0 , /* tp_richcompare */
1316
1341
offsetof(PyModuleObject , md_weaklist ), /* tp_weaklistoffset */
1317
1342
0 , /* tp_iter */
0 commit comments