Skip to content

Commit daa9756

Browse files
authored
bpo-39573: Use Py_TYPE() macro in Modules directory (GH-18393)
Replace direct access to PyObject.ob_type with Py_TYPE().
1 parent 58ac700 commit daa9756

26 files changed

+40
-40
lines changed

Modules/_collectionsmodule.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ deque_concat(dequeobject *deque, PyObject *other)
539539
if (rv == 0) {
540540
PyErr_Format(PyExc_TypeError,
541541
"can only concatenate deque (not \"%.200s\") to deque",
542-
other->ob_type->tp_name);
542+
Py_TYPE(other)->tp_name);
543543
}
544544
return NULL;
545545
}
@@ -2395,7 +2395,7 @@ tuplegetter_descr_get(PyObject *self, PyObject *obj, PyObject *type)
23952395
"descriptor for index '%zd' for tuple subclasses "
23962396
"doesn't apply to '%s' object",
23972397
index,
2398-
obj->ob_type->tp_name);
2398+
Py_TYPE(obj)->tp_name);
23992399
return NULL;
24002400
}
24012401

Modules/_csv.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ _set_char(const char *name, Py_UCS4 *target, PyObject *src, Py_UCS4 dflt)
236236
if (!PyUnicode_Check(src)) {
237237
PyErr_Format(PyExc_TypeError,
238238
"\"%s\" must be string, not %.200s", name,
239-
src->ob_type->tp_name);
239+
Py_TYPE(src)->tp_name);
240240
return -1;
241241
}
242242
len = PyUnicode_GetLength(src);
@@ -807,7 +807,7 @@ Reader_iternext(ReaderObj *self)
807807
"iterator should return strings, "
808808
"not %.200s "
809809
"(did you open the file in text mode?)",
810-
lineobj->ob_type->tp_name
810+
Py_TYPE(lineobj)->tp_name
811811
);
812812
Py_DECREF(lineobj);
813813
return NULL;
@@ -1168,7 +1168,7 @@ csv_writerow(WriterObj *self, PyObject *seq)
11681168
if (iter == NULL)
11691169
return PyErr_Format(_csvstate_global->error_obj,
11701170
"iterable expected, not %.200s",
1171-
seq->ob_type->tp_name);
1171+
Py_TYPE(seq)->tp_name);
11721172

11731173
/* Join all fields in internal buffer.
11741174
*/

Modules/_ctypes/cfield.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ static void
274274
PyCField_dealloc(PyObject *self)
275275
{
276276
PyCField_clear((CFieldObject *)self);
277-
self->ob_type->tp_free((PyObject *)self);
277+
Py_TYPE(self)->tp_free((PyObject *)self);
278278
}
279279

280280
static PyObject *
@@ -1175,7 +1175,7 @@ u_set(void *ptr, PyObject *value, Py_ssize_t size)
11751175
if (!PyUnicode_Check(value)) {
11761176
PyErr_Format(PyExc_TypeError,
11771177
"unicode string expected instead of %s instance",
1178-
value->ob_type->tp_name);
1178+
Py_TYPE(value)->tp_name);
11791179
return NULL;
11801180
} else
11811181
Py_INCREF(value);
@@ -1234,7 +1234,7 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
12341234
if (!PyUnicode_Check(value)) {
12351235
PyErr_Format(PyExc_TypeError,
12361236
"unicode string expected instead of %s instance",
1237-
value->ob_type->tp_name);
1237+
Py_TYPE(value)->tp_name);
12381238
return NULL;
12391239
}
12401240

@@ -1289,7 +1289,7 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length)
12891289
if(!PyBytes_Check(value)) {
12901290
PyErr_Format(PyExc_TypeError,
12911291
"expected bytes, %s found",
1292-
value->ob_type->tp_name);
1292+
Py_TYPE(value)->tp_name);
12931293
return NULL;
12941294
}
12951295

@@ -1334,7 +1334,7 @@ z_set(void *ptr, PyObject *value, Py_ssize_t size)
13341334
}
13351335
PyErr_Format(PyExc_TypeError,
13361336
"bytes or integer address expected instead of %s instance",
1337-
value->ob_type->tp_name);
1337+
Py_TYPE(value)->tp_name);
13381338
return NULL;
13391339
}
13401340

@@ -1373,7 +1373,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size)
13731373
if (!PyUnicode_Check(value)) {
13741374
PyErr_Format(PyExc_TypeError,
13751375
"unicode string or integer address expected instead of %s instance",
1376-
value->ob_type->tp_name);
1376+
Py_TYPE(value)->tp_name);
13771377
return NULL;
13781378
}
13791379

@@ -1416,7 +1416,7 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size)
14161416
} else if (!PyUnicode_Check(value)) {
14171417
PyErr_Format(PyExc_TypeError,
14181418
"unicode string expected instead of %s instance",
1419-
value->ob_type->tp_name);
1419+
Py_TYPE(value)->tp_name);
14201420
return NULL;
14211421
}
14221422

Modules/_ctypes/ctypes.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ typedef struct {
102102
} PyCFuncPtrObject;
103103

104104
extern PyTypeObject PyCStgDict_Type;
105-
#define PyCStgDict_CheckExact(v) ((v)->ob_type == &PyCStgDict_Type)
105+
#define PyCStgDict_CheckExact(v) (Py_TYPE(v) == &PyCStgDict_Type)
106106
#define PyCStgDict_Check(v) PyObject_TypeCheck(v, &PyCStgDict_Type)
107107

108108
extern int PyCStructUnionType_update_stgdict(PyObject *fields, PyObject *type, int isStruct);
@@ -314,7 +314,7 @@ struct tagPyCArgObject {
314314
};
315315

316316
extern PyTypeObject PyCArg_Type;
317-
#define PyCArg_CheckExact(v) ((v)->ob_type == &PyCArg_Type)
317+
#define PyCArg_CheckExact(v) (Py_TYPE(v) == &PyCArg_Type)
318318
extern PyCArgObject *PyCArgObject_new(void);
319319

320320
extern PyObject *

Modules/_ctypes/stgdict.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ PyType_stgdict(PyObject *obj)
190190
StgDictObject *
191191
PyObject_stgdict(PyObject *self)
192192
{
193-
PyTypeObject *type = self->ob_type;
193+
PyTypeObject *type = Py_TYPE(self);
194194
if (!type->tp_dict || !PyCStgDict_CheckExact(type->tp_dict))
195195
return NULL;
196196
return (StgDictObject *)type->tp_dict;

Modules/_cursesmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2924,7 +2924,7 @@ _curses_getwin(PyObject *module, PyObject *file)
29242924
if (!PyBytes_Check(data)) {
29252925
PyErr_Format(PyExc_TypeError,
29262926
"f.read() returned %.100s instead of bytes",
2927-
data->ob_type->tp_name);
2927+
Py_TYPE(data)->tp_name);
29282928
Py_DECREF(data);
29292929
goto error;
29302930
}

Modules/_datetimemodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1810,7 +1810,7 @@ checked_divmod(PyObject *a, PyObject *b)
18101810
if (!PyTuple_Check(result)) {
18111811
PyErr_Format(PyExc_TypeError,
18121812
"divmod() returned non-tuple (type %.200s)",
1813-
result->ob_type->tp_name);
1813+
Py_TYPE(result)->tp_name);
18141814
Py_DECREF(result);
18151815
return NULL;
18161816
}

Modules/_dbmmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ dbm_contains(PyObject *self, PyObject *arg)
255255
else if (!PyBytes_Check(arg)) {
256256
PyErr_Format(PyExc_TypeError,
257257
"dbm key must be bytes or string, not %.100s",
258-
arg->ob_type->tp_name);
258+
Py_TYPE(arg)->tp_name);
259259
return -1;
260260
}
261261
else {

Modules/_decimal/_decimal.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -2584,7 +2584,7 @@ PyDecType_FromObjectExact(PyTypeObject *type, PyObject *v, PyObject *context)
25842584
else {
25852585
PyErr_Format(PyExc_TypeError,
25862586
"conversion from %s to Decimal is not supported",
2587-
v->ob_type->tp_name);
2587+
Py_TYPE(v)->tp_name);
25882588
return NULL;
25892589
}
25902590
}
@@ -2633,7 +2633,7 @@ PyDec_FromObject(PyObject *v, PyObject *context)
26332633
else {
26342634
PyErr_Format(PyExc_TypeError,
26352635
"conversion from %s to Decimal is not supported",
2636-
v->ob_type->tp_name);
2636+
Py_TYPE(v)->tp_name);
26372637
return NULL;
26382638
}
26392639
}
@@ -2696,7 +2696,7 @@ convert_op(int type_err, PyObject **conv, PyObject *v, PyObject *context)
26962696
if (type_err) {
26972697
PyErr_Format(PyExc_TypeError,
26982698
"conversion from %s to Decimal is not supported",
2699-
v->ob_type->tp_name);
2699+
Py_TYPE(v)->tp_name);
27002700
}
27012701
else {
27022702
Py_INCREF(Py_NotImplemented);

Modules/_gdbmmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ dbm_contains(PyObject *self, PyObject *arg)
349349
else if (!PyBytes_Check(arg)) {
350350
PyErr_Format(PyExc_TypeError,
351351
"gdbm key must be bytes or string, not %.100s",
352-
arg->ob_type->tp_name);
352+
Py_TYPE(arg)->tp_name);
353353
return -1;
354354
}
355355
else {

Modules/_io/_iomodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ PyNumber_AsOff_t(PyObject *item, PyObject *err)
544544
/* Otherwise replace the error with caller's error object. */
545545
PyErr_Format(err,
546546
"cannot fit '%.200s' into an offset-sized integer",
547-
item->ob_type->tp_name);
547+
Py_TYPE(item)->tp_name);
548548
}
549549

550550
finish:

Modules/_io/textio.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer,
10941094
PyErr_Format(
10951095
PyExc_TypeError,
10961096
"TextIOWrapper() argument 'errors' must be str or None, not %.50s",
1097-
errors->ob_type->tp_name);
1097+
Py_TYPE(errors)->tp_name);
10981098
return -1;
10991099
}
11001100
else if (io_check_errors(errors)) {

Modules/_json.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
16171617
else {
16181618
PyErr_Format(PyExc_TypeError,
16191619
"keys must be str, int, float, bool or None, "
1620-
"not %.100s", key->ob_type->tp_name);
1620+
"not %.100s", Py_TYPE(key)->tp_name);
16211621
goto bail;
16221622
}
16231623

Modules/_pickle.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1976,7 +1976,7 @@ fast_save_enter(PicklerObject *self, PyObject *obj)
19761976
PyErr_Format(PyExc_ValueError,
19771977
"fast mode: can't pickle cyclic objects "
19781978
"including object type %.200s at %p",
1979-
obj->ob_type->tp_name, obj);
1979+
Py_TYPE(obj)->tp_name, obj);
19801980
self->fast_nesting = -1;
19811981
return 0;
19821982
}

Modules/_sqlite/microprotocols.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
8484
way to get a quotable object to be its instance */
8585

8686
/* look for an adapter in the registry */
87-
key = Py_BuildValue("(OO)", (PyObject*)obj->ob_type, proto);
87+
key = Py_BuildValue("(OO)", (PyObject*)Py_TYPE(obj), proto);
8888
if (!key) {
8989
return NULL;
9090
}

Modules/_testbuffer.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1854,7 +1854,7 @@ ndarray_subscript(NDArrayObject *self, PyObject *key)
18541854
type_error:
18551855
PyErr_Format(PyExc_TypeError,
18561856
"cannot index memory using \"%.200s\"",
1857-
key->ob_type->tp_name);
1857+
Py_TYPE(key)->tp_name);
18581858
err_occurred:
18591859
Py_DECREF(nd);
18601860
return NULL;

Modules/_testcapimodule.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ dict_hassplittable(PyObject *self, PyObject *arg)
274274
if (!PyDict_Check(arg)) {
275275
PyErr_Format(PyExc_TypeError,
276276
"dict_hassplittable() argument must be dict, not '%s'",
277-
arg->ob_type->tp_name);
277+
Py_TYPE(arg)->tp_name);
278278
return NULL;
279279
}
280280

@@ -2724,7 +2724,7 @@ test_thread_state(PyObject *self, PyObject *args)
27242724

27252725
if (!PyCallable_Check(fn)) {
27262726
PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
2727-
fn->ob_type->tp_name);
2727+
Py_TYPE(fn)->tp_name);
27282728
return NULL;
27292729
}
27302730

Modules/_tkinter.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,7 @@ typedef struct {
833833
} PyTclObject;
834834

835835
static PyObject *PyTclObject_Type;
836-
#define PyTclObject_Check(v) ((v)->ob_type == (PyTypeObject *) PyTclObject_Type)
836+
#define PyTclObject_Check(v) (Py_TYPE(v) == (PyTypeObject *) PyTclObject_Type)
837837

838838
static PyObject *
839839
newPyTclObject(Tcl_Obj *arg)
@@ -1734,7 +1734,7 @@ varname_converter(PyObject *in, void *_out)
17341734
}
17351735
PyErr_Format(PyExc_TypeError,
17361736
"must be str, bytes or Tcl_Obj, not %.50s",
1737-
in->ob_type->tp_name);
1737+
Py_TYPE(in)->tp_name);
17381738
return 0;
17391739
}
17401740

Modules/_xxsubinterpretersmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1428,7 +1428,7 @@ channel_id_converter(PyObject *arg, void *ptr)
14281428
else {
14291429
PyErr_Format(PyExc_TypeError,
14301430
"channel ID must be an int, got %.100s",
1431-
arg->ob_type->tp_name);
1431+
Py_TYPE(arg)->tp_name);
14321432
return 0;
14331433
}
14341434
*(int64_t *)ptr = cid;

Modules/cjkcodecs/multibytecodec.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1450,7 +1450,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
14501450
PyErr_Format(PyExc_TypeError,
14511451
"stream function returned a "
14521452
"non-bytes object (%.100s)",
1453-
cres->ob_type->tp_name);
1453+
Py_TYPE(cres)->tp_name);
14541454
goto errorexit;
14551455
}
14561456

Modules/cjkcodecs/multibytecodec.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ typedef struct {
6565
MultibyteCodec *codec;
6666
} MultibyteCodecObject;
6767

68-
#define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)
68+
#define MultibyteCodec_Check(op) (Py_TYPE(op) == &MultibyteCodec_Type)
6969

7070
#define _MultibyteStatefulCodec_HEAD \
7171
PyObject_HEAD \

Modules/gcmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ untrack_dicts(PyGC_Head *head)
653653
static int
654654
has_legacy_finalizer(PyObject *op)
655655
{
656-
return op->ob_type->tp_del != NULL;
656+
return Py_TYPE(op)->tp_del != NULL;
657657
}
658658

659659
/* Move the objects in unreachable with tp_del slots into `finalizers`.

Modules/grpmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
116116
PyErr_Clear();
117117
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
118118
"group id must be int, not %.200",
119-
id->ob_type->tp_name) < 0) {
119+
Py_TYPE(id)->tp_name) < 0) {
120120
return NULL;
121121
}
122122
py_int_id = PyNumber_Long(id);

Modules/parsermodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ PyTypeObject PyST_Type = {
256256

257257

258258
/* PyST_Type isn't subclassable, so just check ob_type */
259-
#define PyST_Object_Check(v) ((v)->ob_type == &PyST_Type)
259+
#define PyST_Object_Check(v) (Py_TYPE(v) == &PyST_Type)
260260

261261
static int
262262
parser_compare_nodes(node *left, node *right)

Modules/sha512module.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ SHA512Type_copy_impl(SHAobject *self)
478478
{
479479
SHAobject *newobj;
480480

481-
if (((PyObject*)self)->ob_type == &SHA512type) {
481+
if (Py_TYPE((PyObject*)self) == &SHA512type) {
482482
if ( (newobj = newSHA512object())==NULL)
483483
return NULL;
484484
} else {

Modules/socketmodule.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,7 @@ idna_converter(PyObject *obj, struct maybe_idna *data)
16701670
}
16711671
else {
16721672
PyErr_Format(PyExc_TypeError, "str, bytes or bytearray expected, not %s",
1673-
obj->ob_type->tp_name);
1673+
Py_TYPE(obj)->tp_name);
16741674
return 0;
16751675
}
16761676
if (strlen(data->buf) != len) {

0 commit comments

Comments
 (0)