@@ -3395,57 +3395,73 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
3395
3395
Py_DECREF (obj );
3396
3396
return NULL ;
3397
3397
}
3398
+
3399
+ // test PyWeakref_Check(), valid weakref object
3398
3400
assert (PyWeakref_Check (weakref ));
3399
3401
assert (PyWeakref_CheckRefExact (weakref ));
3400
3402
assert (PyWeakref_CheckRefExact (weakref ));
3401
3403
assert (Py_REFCNT (obj ) == refcnt );
3402
3404
3403
3405
// test PyWeakref_GetRef(), reference is alive
3404
- PyObject * ref1 ;
3405
- assert (PyWeakref_GetRef (weakref , & ref1 ) == 0 );
3406
- assert (ref1 == obj );
3406
+ PyObject * ref = Py_True ; // marker to check that value was set
3407
+ assert (PyWeakref_GetRef (weakref , & ref ) == 0 );
3408
+ assert (ref == obj );
3407
3409
assert (Py_REFCNT (obj ) == (refcnt + 1 ));
3408
- Py_DECREF (ref1 );
3410
+ Py_DECREF (ref );
3409
3411
3410
3412
// test PyWeakref_GetObject(), reference is alive
3411
- PyObject * ref2 = PyWeakref_GetObject (weakref );
3412
- assert (ref2 == obj );
3413
+ ref = PyWeakref_GetObject (weakref ); // borrowed ref
3414
+ assert (ref == obj );
3413
3415
3414
3416
// test PyWeakref_GET_OBJECT(), reference is alive
3415
- PyObject * ref3 = PyWeakref_GET_OBJECT (weakref );
3416
- assert (ref3 == obj );
3417
+ ref = PyWeakref_GET_OBJECT (weakref ); // borrowed ref
3418
+ assert (ref == obj );
3417
3419
3418
- // delete the referenced object
3420
+ // delete the referenced object: clear the weakref
3419
3421
assert (Py_REFCNT (obj ) == 1 );
3420
3422
Py_DECREF (obj );
3421
3423
3422
3424
// test PyWeakref_GET_OBJECT(), reference is dead
3423
3425
assert (PyWeakref_GET_OBJECT (weakref ) == Py_None );
3424
3426
3425
3427
// test PyWeakref_GetRef(), reference is dead
3426
- PyObject * ref4 = Py_True ; // marker to check that value was set
3427
- assert (PyWeakref_GetRef (weakref , & ref4 ) == 0 );
3428
- assert (ref4 == NULL );
3428
+ ref = Py_True ;
3429
+ assert (PyWeakref_GetRef (weakref , & ref ) == 0 );
3430
+ assert (ref == NULL );
3429
3431
3430
- // None is not a weak reference object
3432
+ // test PyWeakref_Check(), not a weakref object
3431
3433
PyObject * invalid_weakref = Py_None ;
3432
3434
assert (!PyWeakref_Check (invalid_weakref ));
3433
3435
assert (!PyWeakref_CheckRefExact (invalid_weakref ));
3434
3436
assert (!PyWeakref_CheckRefExact (invalid_weakref ));
3435
3437
3436
3438
// test PyWeakref_GetRef(), invalid type
3437
3439
assert (!PyErr_Occurred ());
3438
- PyObject * ref5 = Py_True ; // marker to check that value was set
3439
- assert (PyWeakref_GetRef (invalid_weakref , & ref5 ) == -1 );
3440
+ ref = Py_True ;
3441
+ assert (PyWeakref_GetRef (invalid_weakref , & ref ) == -1 );
3440
3442
assert (PyErr_ExceptionMatches (PyExc_TypeError ));
3441
3443
PyErr_Clear ();
3442
- assert (ref5 == NULL );
3444
+ assert (ref == NULL );
3443
3445
3444
3446
// test PyWeakref_GetObject(), invalid type
3445
3447
assert (PyWeakref_GetObject (invalid_weakref ) == NULL );
3446
3448
assert (PyErr_ExceptionMatches (PyExc_SystemError ));
3447
3449
PyErr_Clear ();
3448
3450
3451
+ // test PyWeakref_GetRef(NULL)
3452
+ ref = Py_True ; // marker to check that value was set
3453
+ assert (PyWeakref_GetRef (NULL , & ref ) == -1 );
3454
+ assert (PyErr_ExceptionMatches (PyExc_SystemError ));
3455
+ assert (ref == NULL );
3456
+ PyErr_Clear ();
3457
+
3458
+ // test PyWeakref_GetObject(NULL)
3459
+ assert (PyWeakref_GetObject (NULL ) == NULL );
3460
+ assert (PyErr_ExceptionMatches (PyExc_SystemError ));
3461
+ PyErr_Clear ();
3462
+
3463
+ Py_DECREF (weakref );
3464
+
3449
3465
Py_RETURN_NONE ;
3450
3466
}
3451
3467
0 commit comments