@@ -1577,10 +1577,10 @@ PySequence_Fast(PyObject *v, const char *m)
15771577 set ValueError and return -1 if none found; also return -1 on error.
15781578 Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error.
15791579*/
1580- int
1580+ Py_ssize_t
15811581_PySequence_IterSearch (PyObject * seq , PyObject * obj , int operation )
15821582{
1583- int n ;
1583+ Py_ssize_t n ;
15841584 int wrapped ; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
15851585 PyObject * it ; /* iter(seq) */
15861586
@@ -1614,6 +1614,7 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
16141614 case PY_ITERSEARCH_COUNT :
16151615 ++ n ;
16161616 if (n <= 0 ) {
1617+ /* XXX(nnorwitz): int means ssize_t */
16171618 PyErr_SetString (PyExc_OverflowError ,
16181619 "count exceeds C int size" );
16191620 goto Fail ;
@@ -1622,6 +1623,7 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
16221623
16231624 case PY_ITERSEARCH_INDEX :
16241625 if (wrapped ) {
1626+ /* XXX(nnorwitz): int means ssize_t */
16251627 PyErr_SetString (PyExc_OverflowError ,
16261628 "index exceeds C int size" );
16271629 goto Fail ;
@@ -1660,7 +1662,7 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation)
16601662}
16611663
16621664/* Return # of times o appears in s. */
1663- int
1665+ Py_ssize_t
16641666PySequence_Count (PyObject * s , PyObject * o )
16651667{
16661668 return _PySequence_IterSearch (s , o , PY_ITERSEARCH_COUNT );
@@ -1672,12 +1674,14 @@ PySequence_Count(PyObject *s, PyObject *o)
16721674int
16731675PySequence_Contains (PyObject * seq , PyObject * ob )
16741676{
1677+ Py_ssize_t result ;
16751678 if (PyType_HasFeature (seq -> ob_type , Py_TPFLAGS_HAVE_SEQUENCE_IN )) {
16761679 PySequenceMethods * sqm = seq -> ob_type -> tp_as_sequence ;
16771680 if (sqm != NULL && sqm -> sq_contains != NULL )
16781681 return (* sqm -> sq_contains )(seq , ob );
16791682 }
1680- return _PySequence_IterSearch (seq , ob , PY_ITERSEARCH_CONTAINS );
1683+ result = _PySequence_IterSearch (seq , ob , PY_ITERSEARCH_CONTAINS );
1684+ return Py_SAFE_DOWNCAST (result , Py_ssize_t , int );
16811685}
16821686
16831687/* Backwards compatibility */
@@ -1688,7 +1692,7 @@ PySequence_In(PyObject *w, PyObject *v)
16881692 return PySequence_Contains (w , v );
16891693}
16901694
1691- int
1695+ Py_ssize_t
16921696PySequence_Index (PyObject * s , PyObject * o )
16931697{
16941698 return _PySequence_IterSearch (s , o , PY_ITERSEARCH_INDEX );
0 commit comments