Skip to content

Commit 8598eb5

Browse files
committed
Add the utility.
Also use it in _bz2.
1 parent 11a5fc8 commit 8598eb5

File tree

3 files changed

+13
-16
lines changed

3 files changed

+13
-16
lines changed

Include/cpython/object.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,3 +491,7 @@ PyAPI_FUNC(int) PyUnstable_TryIncRef(PyObject *);
491491
PyAPI_FUNC(void) PyUnstable_EnableTryIncRef(PyObject *);
492492

493493
PyAPI_FUNC(int) PyUnstable_Object_IsUniquelyReferenced(PyObject *);
494+
495+
/* Utility for the tp_traverse slot of mutable heap types that have no other
496+
* references. */
497+
PyAPI_FUNC(int) _PyObject_VisitType(PyObject *op, visitproc visit, void *arg);

Modules/_bz2module.c

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,6 @@ BZ2Compressor_dealloc(PyObject *op)
391391
Py_DECREF(tp);
392392
}
393393

394-
static int
395-
BZ2Compressor_traverse(PyObject *self, visitproc visit, void *arg)
396-
{
397-
Py_VISIT(Py_TYPE(self));
398-
return 0;
399-
}
400-
401394
static PyMethodDef BZ2Compressor_methods[] = {
402395
_BZ2_BZ2COMPRESSOR_COMPRESS_METHODDEF
403396
_BZ2_BZ2COMPRESSOR_FLUSH_METHODDEF
@@ -409,7 +402,7 @@ static PyType_Slot bz2_compressor_type_slots[] = {
409402
{Py_tp_methods, BZ2Compressor_methods},
410403
{Py_tp_new, _bz2_BZ2Compressor},
411404
{Py_tp_doc, (char *)_bz2_BZ2Compressor__doc__},
412-
{Py_tp_traverse, BZ2Compressor_traverse},
405+
{Py_tp_traverse, _PyObject_VisitType},
413406
{0, 0}
414407
};
415408

@@ -703,13 +696,6 @@ BZ2Decompressor_dealloc(PyObject *op)
703696
Py_DECREF(tp);
704697
}
705698

706-
static int
707-
BZ2Decompressor_traverse(PyObject *self, visitproc visit, void *arg)
708-
{
709-
Py_VISIT(Py_TYPE(self));
710-
return 0;
711-
}
712-
713699
static PyMethodDef BZ2Decompressor_methods[] = {
714700
_BZ2_BZ2DECOMPRESSOR_DECOMPRESS_METHODDEF
715701
{NULL}
@@ -740,7 +726,7 @@ static PyType_Slot bz2_decompressor_type_slots[] = {
740726
{Py_tp_doc, (char *)_bz2_BZ2Decompressor__doc__},
741727
{Py_tp_members, BZ2Decompressor_members},
742728
{Py_tp_new, _bz2_BZ2Decompressor},
743-
{Py_tp_traverse, BZ2Decompressor_traverse},
729+
{Py_tp_traverse, _PyObject_VisitType},
744730
{0, 0}
745731
};
746732

Objects/object.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3384,3 +3384,10 @@ PyUnstable_Object_IsUniquelyReferenced(PyObject *op)
33843384
assert(op != NULL);
33853385
return _PyObject_IsUniquelyReferenced(op);
33863386
}
3387+
3388+
int _PyObject_VisitType(PyObject *op, visitproc visit, void *arg)
3389+
{
3390+
assert(op != NULL);
3391+
Py_VISIT(Py_TYPE(op));
3392+
return 0;
3393+
}

0 commit comments

Comments
 (0)