bpo-39573: Use Py_REFCNT() macro (GH-18388) · python/cpython@a93c51e (original) (raw)

`@@ -58,7 +58,7 @@ _Py_GetRefTotal(void)

`

58

58

`Py_ssize_t total = _Py_RefTotal;

`

59

59

`o = _PySet_Dummy;

`

60

60

`if (o != NULL)

`

61

``

`-

total -= o->ob_refcnt;

`

``

61

`+

total -= Py_REFCNT(o);

`

62

62

`return total;

`

63

63

`}

`

64

64

``

`@@ -206,32 +206,32 @@ PyObject_CallFinalizer(PyObject *self)

`

206

206

`int

`

207

207

`PyObject_CallFinalizerFromDealloc(PyObject *self)

`

208

208

`{

`

209

``

`-

if (self->ob_refcnt != 0) {

`

``

209

`+

if (Py_REFCNT(self) != 0) {

`

210

210

`_PyObject_ASSERT_FAILED_MSG(self,

`

211

211

`"PyObject_CallFinalizerFromDealloc called "

`

212

212

`"on object with a non-zero refcount");

`

213

213

` }

`

214

214

``

215

215

`/* Temporarily resurrect the object. */

`

216

``

`-

self->ob_refcnt = 1;

`

``

216

`+

Py_REFCNT(self) = 1;

`

217

217

``

218

218

`PyObject_CallFinalizer(self);

`

219

219

``

220

220

`_PyObject_ASSERT_WITH_MSG(self,

`

221

``

`-

self->ob_refcnt > 0,

`

``

221

`+

Py_REFCNT(self) > 0,

`

222

222

`"refcount is too small");

`

223

223

``

224

224

`/* Undo the temporary resurrection; can't use DECREF here, it would

`

225

225

` * cause a recursive call. */

`

226

``

`-

if (--self->ob_refcnt == 0) {

`

``

226

`+

if (--Py_REFCNT(self) == 0) {

`

227

227

`return 0; /* this is the normal path out */

`

228

228

` }

`

229

229

``

230

230

`/* tp_finalize resurrected it! Make it look like the original Py_DECREF

`

231

231

` * never happened. */

`

232

``

`-

Py_ssize_t refcnt = self->ob_refcnt;

`

``

232

`+

Py_ssize_t refcnt = Py_REFCNT(self);

`

233

233

`_Py_NewReference(self);

`

234

``

`-

self->ob_refcnt = refcnt;

`

``

234

`+

Py_REFCNT(self) = refcnt;

`

235

235

``

236

236

`_PyObject_ASSERT(self,

`

237

237

` (!PyType_IS_GC(Py_TYPE(self))

`

`@@ -263,12 +263,12 @@ PyObject_Print(PyObject *op, FILE *fp, int flags)

`

263

263

`Py_END_ALLOW_THREADS

`

264

264

` }

`

265

265

`else {

`

266

``

`-

if (op->ob_refcnt <= 0) {

`

``

266

`+

if (Py_REFCNT(op) <= 0) {

`

267

267

`/* XXX(twouters) cast refcount to long until %zd is

`

268

268

` universally available */

`

269

269

`Py_BEGIN_ALLOW_THREADS

`

270

270

`fprintf(fp, "<refcnt %ld at %p>",

`

271

``

`-

(long)op->ob_refcnt, (void *)op);

`

``

271

`+

(long)Py_REFCNT(op), (void *)op);

`

272

272

`Py_END_ALLOW_THREADS

`

273

273

` }

`

274

274

`else {

`

`@@ -363,7 +363,7 @@ _PyObject_Dump(PyObject* op)

`

363

363

`fprintf(stderr, "object address : %p\n", (void *)op);

`

364

364

`/* XXX(twouters) cast refcount to long until %zd is

`

365

365

` universally available */

`

366

``

`-

fprintf(stderr, "object refcount : %ld\n", (long)op->ob_refcnt);

`

``

366

`+

fprintf(stderr, "object refcount : %ld\n", (long)Py_REFCNT(op));

`

367

367

`fflush(stderr);

`

368

368

``

369

369

`PyTypeObject *type = Py_TYPE(op);

`

`@@ -1010,7 +1010,7 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)

`

1010

1010

`return err;

`

1011

1011

` }

`

1012

1012

`Py_DECREF(name);

`

1013

``

`-

_PyObject_ASSERT(name, name->ob_refcnt >= 1);

`

``

1013

`+

_PyObject_ASSERT(name, Py_REFCNT(name) >= 1);

`

1014

1014

`if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)

`

1015

1015

`PyErr_Format(PyExc_TypeError,

`

1016

1016

`"'%.100s' object has no attributes "

`

`@@ -1829,7 +1829,7 @@ _Py_NewReference(PyObject *op)

`

1829

1829

`void

`

1830

1830

`_Py_ForgetReference(PyObject *op)

`

1831

1831

`{

`

1832

``

`-

if (op->ob_refcnt < 0) {

`

``

1832

`+

if (Py_REFCNT(op) < 0) {

`

1833

1833

`_PyObject_ASSERT_FAILED_MSG(op, "negative refcnt");

`

1834

1834

` }

`

1835

1835

``

`@@ -1867,7 +1867,7 @@ _Py_PrintReferences(FILE *fp)

`

1867

1867

`PyObject *op;

`

1868

1868

`fprintf(fp, "Remaining objects:\n");

`

1869

1869

`for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {

`

1870

``

`-

fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, op->ob_refcnt);

`

``

1870

`+

fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, Py_REFCNT(op));

`

1871

1871

`if (PyObject_Print(op, fp, 0) != 0)

`

1872

1872

`PyErr_Clear();

`

1873

1873

`putc('\n', fp);

`

`@@ -1884,7 +1884,7 @@ _Py_PrintReferenceAddresses(FILE *fp)

`

1884

1884

`fprintf(fp, "Remaining object addresses:\n");

`

1885

1885

`for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)

`

1886

1886

`fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,

`

1887

``

`-

op->ob_refcnt, Py_TYPE(op)->tp_name);

`

``

1887

`+

Py_REFCNT(op), Py_TYPE(op)->tp_name);

`

1888

1888

`}

`

1889

1889

``

1890

1890

`PyObject *

`

`@@ -2025,7 +2025,7 @@ _PyTrash_deposit_object(PyObject *op)

`

2025

2025

``

2026

2026

`_PyObject_ASSERT(op, PyObject_IS_GC(op));

`

2027

2027

`_PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));

`

2028

``

`-

_PyObject_ASSERT(op, op->ob_refcnt == 0);

`

``

2028

`+

_PyObject_ASSERT(op, Py_REFCNT(op) == 0);

`

2029

2029

`_PyGCHead_SET_PREV(_Py_AS_GC(op), gcstate->trash_delete_later);

`

2030

2030

`gcstate->trash_delete_later = op;

`

2031

2031

`}

`

`@@ -2037,7 +2037,7 @@ _PyTrash_thread_deposit_object(PyObject *op)

`

2037

2037

`PyThreadState *tstate = _PyThreadState_GET();

`

2038

2038

`_PyObject_ASSERT(op, PyObject_IS_GC(op));

`

2039

2039

`_PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));

`

2040

``

`-

_PyObject_ASSERT(op, op->ob_refcnt == 0);

`

``

2040

`+

_PyObject_ASSERT(op, Py_REFCNT(op) == 0);

`

2041

2041

`_PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);

`

2042

2042

`tstate->trash_delete_later = op;

`

2043

2043

`}

`

`@@ -2064,7 +2064,7 @@ _PyTrash_destroy_chain(void)

`

2064

2064

` * assorted non-release builds calling Py_DECREF again ends

`

2065

2065

` * up distorting allocation statistics.

`

2066

2066

` */

`

2067

``

`-

_PyObject_ASSERT(op, op->ob_refcnt == 0);

`

``

2067

`+

_PyObject_ASSERT(op, Py_REFCNT(op) == 0);

`

2068

2068

`++gcstate->trash_delete_nesting;

`

2069

2069

` (*dealloc)(op);

`

2070

2070

`--gcstate->trash_delete_nesting;

`

`@@ -2102,7 +2102,7 @@ _PyTrash_thread_destroy_chain(void)

`

2102

2102

` * assorted non-release builds calling Py_DECREF again ends

`

2103

2103

` * up distorting allocation statistics.

`

2104

2104

` */

`

2105

``

`-

_PyObject_ASSERT(op, op->ob_refcnt == 0);

`

``

2105

`+

_PyObject_ASSERT(op, Py_REFCNT(op) == 0);

`

2106

2106

` (*dealloc)(op);

`

2107

2107

`assert(tstate->trash_delete_nesting == 1);

`

2108

2108

` }

`