@@ -18,6 +18,8 @@ typedef struct {
18
18
} PyCapsule ;
19
19
20
20
21
+ #define _PyCapsule_CAST (op ) ((PyCapsule *)(op))
22
+
21
23
22
24
static int
23
25
_is_legal_capsule (PyObject * op , const char * invalid_capsule )
@@ -284,7 +286,7 @@ PyCapsule_Import(const char *name, int no_block)
284
286
static void
285
287
capsule_dealloc (PyObject * op )
286
288
{
287
- PyCapsule * capsule = ( PyCapsule * ) op ;
289
+ PyCapsule * capsule = _PyCapsule_CAST ( op ) ;
288
290
PyObject_GC_UnTrack (op );
289
291
if (capsule -> destructor ) {
290
292
capsule -> destructor (op );
@@ -296,7 +298,7 @@ capsule_dealloc(PyObject *op)
296
298
static PyObject *
297
299
capsule_repr (PyObject * o )
298
300
{
299
- PyCapsule * capsule = ( PyCapsule * ) o ;
301
+ PyCapsule * capsule = _PyCapsule_CAST ( o ) ;
300
302
const char * name ;
301
303
const char * quote ;
302
304
@@ -314,28 +316,27 @@ capsule_repr(PyObject *o)
314
316
315
317
316
318
static int
317
- capsule_traverse (PyCapsule * capsule , visitproc visit , void * arg )
319
+ capsule_traverse (PyObject * self , visitproc visit , void * arg )
318
320
{
319
321
// Capsule object is only tracked by the GC
320
322
// if _PyCapsule_SetTraverse() is called, but
321
323
// this can still be manually triggered by gc.get_referents()
322
-
324
+ PyCapsule * capsule = _PyCapsule_CAST ( self );
323
325
if (capsule -> traverse_func != NULL ) {
324
- return capsule -> traverse_func (( PyObject * ) capsule , visit , arg );
326
+ return capsule -> traverse_func (self , visit , arg );
325
327
}
326
-
327
328
return 0 ;
328
329
}
329
330
330
331
331
332
static int
332
- capsule_clear (PyCapsule * capsule )
333
+ capsule_clear (PyObject * self )
333
334
{
334
335
// Capsule object is only tracked by the GC
335
336
// if _PyCapsule_SetTraverse() is called
337
+ PyCapsule * capsule = _PyCapsule_CAST (self );
336
338
assert (capsule -> clear_func != NULL );
337
-
338
- return capsule -> clear_func ((PyObject * )capsule );
339
+ return capsule -> clear_func (self );
339
340
}
340
341
341
342
@@ -358,8 +359,8 @@ PyTypeObject PyCapsule_Type = {
358
359
.tp_dealloc = capsule_dealloc ,
359
360
.tp_repr = capsule_repr ,
360
361
.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 ,
363
364
};
364
365
365
366
0 commit comments