From 557287075c264d2458cd3e1b45e9b8ee5341e0a1 Mon Sep 17 00:00:00 2001 From: Andy Lester Date: Fri, 6 Mar 2020 16:53:17 -0600 Subject: [PATCH] bpo-39573: Use Py_IS_TYPE() macro to check for types (GH-18809) Co-authored-by: Victor Stinner --- Modules/_functoolsmodule.c | 2 +- Modules/_threadmodule.c | 4 ++-- Modules/itertoolsmodule.c | 2 +- Modules/posixmodule.c | 3 +-- Objects/abstract.c | 5 ++--- Objects/object.c | 4 ++-- Objects/setobject.c | 2 +- Objects/tupleobject.c | 2 +- Objects/typeobject.c | 6 +++--- Python/errors.c | 2 +- 10 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index ab0839cdc74..0c0fae1a979 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -573,7 +573,7 @@ keyobject_richcompare(PyObject *ko, PyObject *other, int op) PyObject *answer; PyObject* stack[2]; - if (Py_TYPE(other) != &keyobject_type){ + if (!Py_IS_TYPE(other, &keyobject_type)) { PyErr_Format(PyExc_TypeError, "other argument must be K instance"); return NULL; } diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index da5fe7915a8..11bc16f4b31 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -938,7 +938,7 @@ local_getattro(localobject *self, PyObject *name) if (r == -1) return NULL; - if (Py_TYPE(self) != &localtype) + if (!Py_IS_TYPE(self, &localtype)) /* use generic lookup for subtypes */ return _PyObject_GenericGetAttrWithDict( (PyObject *)self, name, ldict, 0); @@ -1400,7 +1400,7 @@ static PyStructSequence_Desc ExceptHookArgs_desc = { static PyObject * thread_excepthook(PyObject *self, PyObject *args) { - if (Py_TYPE(args) != &ExceptHookArgsType) { + if (!Py_IS_TYPE(args, &ExceptHookArgsType)) { PyErr_SetString(PyExc_TypeError, "_thread.excepthook argument type " "must be ExceptHookArgs"); diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index d545028901b..9505fd454b4 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -614,7 +614,7 @@ itertools_teedataobject_impl(PyTypeObject *type, PyObject *it, if (len == LINKCELLS) { if (next != Py_None) { - if (Py_TYPE(next) != &teedataobject_type) + if (!Py_IS_TYPE(next, &teedataobject_type)) goto err; assert(tdo->nextlink == NULL); Py_INCREF(next); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 4d6d255b346..29aeca4169d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6380,8 +6380,7 @@ convert_sched_param(PyObject *param, struct sched_param *res) { long priority; - PyObject *SchedParamType = _posixstate_global->SchedParamType; - if (Py_TYPE(param) != (PyTypeObject *)SchedParamType) { + if (!Py_IS_TYPE(param, (PyTypeObject *)_posixstate_global->SchedParamType)) { PyErr_SetString(PyExc_TypeError, "must have a sched_param object"); return 0; } diff --git a/Objects/abstract.c b/Objects/abstract.c index 454e0da71af..accd72d5f28 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -834,7 +834,7 @@ binary_op1(PyObject *v, PyObject *w, const int op_slot) if (Py_TYPE(v)->tp_as_number != NULL) slotv = NB_BINOP(Py_TYPE(v)->tp_as_number, op_slot); - if (Py_TYPE(w) != Py_TYPE(v) && + if (!Py_IS_TYPE(w, Py_TYPE(v)) && Py_TYPE(w)->tp_as_number != NULL) { slotw = NB_BINOP(Py_TYPE(w)->tp_as_number, op_slot); if (slotw == slotv) @@ -925,8 +925,7 @@ ternary_op(PyObject *v, mw = Py_TYPE(w)->tp_as_number; if (mv != NULL) slotv = NB_TERNOP(mv, op_slot); - if (Py_TYPE(w) != Py_TYPE(v) && - mw != NULL) { + if (!Py_IS_TYPE(w, Py_TYPE(v)) && mw != NULL) { slotw = NB_TERNOP(mw, op_slot); if (slotw == slotv) slotw = NULL; diff --git a/Objects/object.c b/Objects/object.c index 8314a08150e..bb47cfa8585 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -657,7 +657,7 @@ do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op) PyObject *res; int checked_reverse_op = 0; - if (Py_TYPE(v) != Py_TYPE(w) && + if (!Py_IS_TYPE(v, Py_TYPE(w)) && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v)) && (f = Py_TYPE(w)->tp_richcompare) != NULL) { checked_reverse_op = 1; @@ -1907,7 +1907,7 @@ _Py_GetObjects(PyObject *self, PyObject *args) return NULL; for (i = 0; (n == 0 || i < n) && op != &refchain; i++) { while (op == self || op == args || op == res || op == t || - (t != NULL && Py_TYPE(op) != (PyTypeObject *) t)) { + (t != NULL && !Py_IS_TYPE(op, (PyTypeObject *) t))) { op = op->_ob_next; if (op == &refchain) return res; diff --git a/Objects/setobject.c b/Objects/setobject.c index bb7c0b8f045..43fa5d17fd2 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -608,7 +608,7 @@ set_repr(PySetObject *so) goto done; listrepr = tmp; - if (Py_TYPE(so) != &PySet_Type) + if (!Py_IS_TYPE(so, &PySet_Type)) result = PyUnicode_FromFormat("%s({%U})", Py_TYPE(so)->tp_name, listrepr); diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 92374cc130d..52ecb5446fe 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -881,7 +881,7 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize) Py_ssize_t oldsize; v = (PyTupleObject *) *pv; - if (v == NULL || Py_TYPE(v) != &PyTuple_Type || + if (v == NULL || !Py_IS_TYPE(v, &PyTuple_Type) || (Py_SIZE(v) != 0 && Py_REFCNT(v) != 1)) { *pv = 0; Py_XDECREF(v); diff --git a/Objects/typeobject.c b/Objects/typeobject.c index cf749eff58f..ec8dc19da99 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1889,7 +1889,7 @@ mro_invoke(PyTypeObject *type) { PyObject *mro_result; PyObject *new_mro; - int custom = (Py_TYPE(type) != &PyType_Type); + const int custom = !Py_IS_TYPE(type, &PyType_Type); if (custom) { int unbound; @@ -6191,7 +6191,7 @@ FUNCNAME(PyObject *self, PyObject *other) \ PyThreadState *tstate = _PyThreadState_GET(); \ _Py_static_string(op_id, OPSTR); \ _Py_static_string(rop_id, ROPSTR); \ - int do_other = Py_TYPE(self) != Py_TYPE(other) && \ + int do_other = !Py_IS_TYPE(self, Py_TYPE(other)) && \ Py_TYPE(other)->tp_as_number != NULL && \ Py_TYPE(other)->tp_as_number->SLOTNAME == TESTFUNC; \ if (Py_TYPE(self)->tp_as_number != NULL && \ @@ -7901,7 +7901,7 @@ super_descr_get(PyObject *self, PyObject *obj, PyObject *type) Py_INCREF(self); return self; } - if (Py_TYPE(su) != &PySuper_Type) + if (!Py_IS_TYPE(su, &PySuper_Type)) /* If su is an instance of a (strict) subclass of super, call its type */ return PyObject_CallFunctionObjArgs((PyObject *)Py_TYPE(su), diff --git a/Python/errors.c b/Python/errors.c index 6baa229ccc7..4656fb2a336 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1321,7 +1321,7 @@ _PyErr_WriteUnraisableDefaultHook(PyObject *args) { PyThreadState *tstate = _PyThreadState_GET(); - if (Py_TYPE(args) != &UnraisableHookArgsType) { + if (!Py_IS_TYPE(args, &UnraisableHookArgsType)) { _PyErr_SetString(tstate, PyExc_TypeError, "sys.unraisablehook argument type " "must be UnraisableHookArgs");