diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/abstract.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index dc46193..7ded61a 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1577,10 +1577,10 @@ PySequence_Fast(PyObject *v, const char *m) set ValueError and return -1 if none found; also return -1 on error. Py_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on error. */ -int +Py_ssize_t _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation) { - int n; + Py_ssize_t n; int wrapped; /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */ PyObject *it; /* iter(seq) */ @@ -1614,6 +1614,7 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation) case PY_ITERSEARCH_COUNT: ++n; if (n <= 0) { + /* XXX(nnorwitz): int means ssize_t */ PyErr_SetString(PyExc_OverflowError, "count exceeds C int size"); goto Fail; @@ -1622,6 +1623,7 @@ _PySequence_IterSearch(PyObject *seq, PyObject *obj, int operation) case PY_ITERSEARCH_INDEX: if (wrapped) { + /* XXX(nnorwitz): int means ssize_t */ PyErr_SetString(PyExc_OverflowError, "index exceeds C int size"); goto Fail; @@ -1660,7 +1662,7 @@ Done: } /* Return # of times o appears in s. */ -int +Py_ssize_t PySequence_Count(PyObject *s, PyObject *o) { return _PySequence_IterSearch(s, o, PY_ITERSEARCH_COUNT); @@ -1672,12 +1674,14 @@ PySequence_Count(PyObject *s, PyObject *o) int PySequence_Contains(PyObject *seq, PyObject *ob) { + Py_ssize_t result; if (PyType_HasFeature(seq->ob_type, Py_TPFLAGS_HAVE_SEQUENCE_IN)) { PySequenceMethods *sqm = seq->ob_type->tp_as_sequence; if (sqm != NULL && sqm->sq_contains != NULL) return (*sqm->sq_contains)(seq, ob); } - return _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS); + result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS); + return Py_SAFE_DOWNCAST(result, Py_ssize_t, int); } /* Backwards compatibility */ @@ -1688,7 +1692,7 @@ PySequence_In(PyObject *w, PyObject *v) return PySequence_Contains(w, v); } -int +Py_ssize_t PySequence_Index(PyObject *s, PyObject *o) { return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX); |