summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2006-03-04 18:49:58 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2006-03-04 18:49:58 (GMT)
commit1fc4b776d47b45133a2730d191552ec2f1928baa (patch)
treeb4aabdec7ebdef5cf5f9c362ff19c23ca9e4024e /Objects
parent8c49c82889d1af480fa159b56c0e70ef81cf6749 (diff)
downloadcpython-1fc4b776d47b45133a2730d191552ec2f1928baa.zip
cpython-1fc4b776d47b45133a2730d191552ec2f1928baa.tar.gz
cpython-1fc4b776d47b45133a2730d191552ec2f1928baa.tar.bz2
Change some sequnce APIs to use Py_ssize_t.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/abstract.c14
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);