@@ -18,6 +18,8 @@ typedef struct {
1818} PyCapsule ;
1919
2020
21+ #define _PyCapsule_CAST (op ) ((PyCapsule *)(op))
22+
2123
2224static int
2325_is_legal_capsule (PyObject * op , const char * invalid_capsule )
@@ -284,7 +286,7 @@ PyCapsule_Import(const char *name, int no_block)
284286static void
285287capsule_dealloc (PyObject * op )
286288{
287- PyCapsule * capsule = ( PyCapsule * ) op ;
289+ PyCapsule * capsule = _PyCapsule_CAST ( op ) ;
288290 PyObject_GC_UnTrack (op );
289291 if (capsule -> destructor ) {
290292 capsule -> destructor (op );
@@ -296,7 +298,7 @@ capsule_dealloc(PyObject *op)
296298static PyObject *
297299capsule_repr (PyObject * o )
298300{
299- PyCapsule * capsule = ( PyCapsule * ) o ;
301+ PyCapsule * capsule = _PyCapsule_CAST ( o ) ;
300302 const char * name ;
301303 const char * quote ;
302304
@@ -314,28 +316,27 @@ capsule_repr(PyObject *o)
314316
315317
316318static int
317- capsule_traverse (PyCapsule * capsule , visitproc visit , void * arg )
319+ capsule_traverse (PyObject * self , visitproc visit , void * arg )
318320{
319321 // Capsule object is only tracked by the GC
320322 // if _PyCapsule_SetTraverse() is called, but
321323 // this can still be manually triggered by gc.get_referents()
322-
324+ PyCapsule * capsule = _PyCapsule_CAST ( self );
323325 if (capsule -> traverse_func != NULL ) {
324- return capsule -> traverse_func (( PyObject * ) capsule , visit , arg );
326+ return capsule -> traverse_func (self , visit , arg );
325327 }
326-
327328 return 0 ;
328329}
329330
330331
331332static int
332- capsule_clear (PyCapsule * capsule )
333+ capsule_clear (PyObject * self )
333334{
334335 // Capsule object is only tracked by the GC
335336 // if _PyCapsule_SetTraverse() is called
337+ PyCapsule * capsule = _PyCapsule_CAST (self );
336338 assert (capsule -> clear_func != NULL );
337-
338- return capsule -> clear_func ((PyObject * )capsule );
339+ return capsule -> clear_func (self );
339340}
340341
341342
@@ -358,8 +359,8 @@ PyTypeObject PyCapsule_Type = {
358359 .tp_dealloc = capsule_dealloc ,
359360 .tp_repr = capsule_repr ,
360361 .tp_doc = PyCapsule_Type__doc__ ,
361- .tp_traverse = ( traverseproc ) capsule_traverse ,
362- .tp_clear = ( inquiry ) capsule_clear ,
362+ .tp_traverse = capsule_traverse ,
363+ .tp_clear = capsule_clear ,
363364};
364365
365366
0 commit comments