@@ -862,11 +862,37 @@ bool CPySet_Remove(PyObject *set, PyObject *key);
862862
863863// Tuple operations
864864
865-
866- PyObject * CPySequenceTuple_GetItem (PyObject * tuple , CPyTagged index );
867865PyObject * CPySequenceTuple_GetSlice (PyObject * obj , CPyTagged start , CPyTagged end );
868- PyObject * CPySequenceTuple_GetItemUnsafe (PyObject * tuple , Py_ssize_t index );
869- void CPySequenceTuple_SetItemUnsafe (PyObject * tuple , Py_ssize_t index , PyObject * value );
866+ PyObject * CPySequenceTuple_GetItem_ (PyObject * tuple , CPyTagged index );
867+
868+ static inline PyObject * CPySequenceTuple_GetItem (PyObject * tuple , CPyTagged index )
869+ {
870+ if (likely (CPyTagged_CheckShort (index ) && !CPyTagged_IsNegative (index ))) {
871+ Py_ssize_t n = CPyTagged_ShortAsSsize_t (index );
872+ Py_ssize_t size = PyTuple_GET_SIZE (tuple );
873+ if (unlikely (n >= size )) {
874+ PyErr_SetString (PyExc_IndexError , "tuple index out of range" );
875+ return NULL ;
876+ }
877+ PyObject * result = PyTuple_GET_ITEM (tuple , n );
878+ Py_INCREF (result );
879+ return result ;
880+ } else {
881+ return CPySequenceTuple_GetItem_ (tuple , index );
882+ }
883+ }
884+
885+ static inline PyObject * CPySequenceTuple_GetItemUnsafe (PyObject * tuple , Py_ssize_t index )
886+ {
887+ PyObject * result = PyTuple_GET_ITEM (tuple , index );
888+ Py_INCREF (result );
889+ return result ;
890+ }
891+
892+ static inline void CPySequenceTuple_SetItemUnsafe (PyObject * tuple , Py_ssize_t index , PyObject * value )
893+ {
894+ PyTuple_SET_ITEM (tuple , index , value );
895+ }
870896
871897
872898// Exception operations
0 commit comments