Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1fc4b77

Browse files
committed
Change some sequnce APIs to use Py_ssize_t.
1 parent 8c49c82 commit 1fc4b77

2 files changed

Lines changed: 13 additions & 9 deletions

File tree

Include/abstract.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
10421042
/* Return a pointer to the underlying item array for
10431043
an object retured by PySequence_Fast */
10441044

1045-
PyAPI_FUNC(int) PySequence_Count(PyObject *o, PyObject *value);
1045+
PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
10461046

10471047
/*
10481048
Return the number of occurrences on value on o, that is,
@@ -1060,8 +1060,8 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
10601060
#define PY_ITERSEARCH_COUNT 1
10611061
#define PY_ITERSEARCH_INDEX 2
10621062
#define PY_ITERSEARCH_CONTAINS 3
1063-
PyAPI_FUNC(int) _PySequence_IterSearch(PyObject *seq, PyObject *obj,
1064-
int operation);
1063+
PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
1064+
PyObject *obj, int operation);
10651065
/*
10661066
Iterate over seq. Result depends on the operation:
10671067
PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
@@ -1086,7 +1086,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
10861086
is equivalent to the Python expression: value in o.
10871087
*/
10881088

1089-
PyAPI_FUNC(int) PySequence_Index(PyObject *o, PyObject *value);
1089+
PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
10901090

10911091
/*
10921092
Return the first index for which o[i]=value. On error,

Objects/abstract.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
16641666
PySequence_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)
16721674
int
16731675
PySequence_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
16921696
PySequence_Index(PyObject *s, PyObject *o)
16931697
{
16941698
return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);

0 commit comments

Comments
 (0)