File tree 2 files changed +21
-4
lines changed
2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -741,6 +741,9 @@ PyStackRef_LongCheck(_PyStackRef stackref)
741
741
static inline bool
742
742
PyStackRef_ExceptionInstanceCheck (_PyStackRef stackref )
743
743
{
744
+ if (PyStackRef_IsTaggedInt (stackref )) {
745
+ return false;
746
+ }
744
747
return PyExceptionInstance_Check (PyStackRef_AsPyObjectBorrow (stackref ));
745
748
}
746
749
Original file line number Diff line number Diff line change @@ -3421,14 +3421,28 @@ _PyStackRef
3421
3421
_PyForIter_NextWithIndex (PyObject * seq , _PyStackRef index )
3422
3422
{
3423
3423
assert (PyStackRef_IsTaggedInt (index ));
3424
- assert (Py_TYPE (seq ) == & PyTuple_Type || Py_TYPE (seq ) == & PyList_Type );
3425
- size_t size = Py_SIZE (seq );
3424
+ assert (PyTuple_CheckExact (seq ) || PyList_CheckExact (seq ));
3426
3425
intptr_t i = PyStackRef_UntagInt (index );
3426
+ if (PyTuple_CheckExact (seq )) {
3427
+ size_t size = PyTuple_GET_SIZE (seq );
3428
+ if ((size_t )i >= size ) {
3429
+ return PyStackRef_NULL ;
3430
+ }
3431
+ return PyStackRef_FromPyObjectNew (PyTuple_GET_ITEM (seq , i ));
3432
+ }
3433
+ size_t size = PyList_GET_SIZE (seq );
3427
3434
if ((size_t )i >= size ) {
3428
3435
return PyStackRef_NULL ;
3429
3436
}
3430
- PyObject * next_o = PySequence_Fast_GET_ITEM (seq , i );
3431
- return PyStackRef_FromPyObjectNew (next_o );
3437
+ #ifdef Py_GIL_DISABLED
3438
+ PyObject * item = _PyList_GetItemRef ((PyListObject * )seq , i );
3439
+ if (item == NULL ) {
3440
+ return PyStackRef_NULL ;
3441
+ }
3442
+ return PyStackRef_FromPyObjectSteal (item );
3443
+ #else
3444
+ return PyStackRef_FromPyObjectNew (PyList_GET_ITEM (seq , i ));
3445
+ #endif
3432
3446
}
3433
3447
3434
3448
/* Check if a 'cls' provides the given special method. */
You can’t perform that action at this time.
0 commit comments