mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
Change some sequnce APIs to use Py_ssize_t.
This commit is contained in:
parent
8c49c82889
commit
1fc4b776d4
2 changed files with 13 additions and 9 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue