Patch by Moshe Zadka: move the string special case from abstract.c

here.

[Patch modified by GvR to keep the original exception.]
This commit is contained in:
Guido van Rossum 2000-03-07 15:53:43 +00:00
parent da2361ac1d
commit 9284a572bc
1 changed files with 22 additions and 0 deletions

View File

@ -381,6 +381,27 @@ string_slice(a, i, j)
return PyString_FromStringAndSize(a->ob_sval + i, (int) (j-i));
}
static int
string_contains(a, el)
PyObject *a, *el;
{
register char *s, *end;
register char c;
if (!PyString_Check(el) || PyString_Size(el) != 1) {
PyErr_SetString(PyExc_TypeError,
"string member test needs char left operand");
return -1;
}
c = PyString_AsString(el)[0];
s = PyString_AsString(a);
end = s + PyString_Size(a);
while (s < end) {
if (c == *s++)
return 1;
}
return 0;
}
static PyObject *
string_item(a, i)
PyStringObject *a;
@ -516,6 +537,7 @@ static PySequenceMethods string_as_sequence = {
(intintargfunc)string_slice, /*sq_slice*/
0, /*sq_ass_item*/
0, /*sq_ass_slice*/
(objobjproc)string_contains /*sq_contains*/
};
static PyBufferProcs string_as_buffer = {