summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-03-07 15:53:43 (GMT)
committerGuido van Rossum <guido@python.org>2000-03-07 15:53:43 (GMT)
commit9284a572bc22c31a965ebc03d428ec6145f70c73 (patch)
treedbeb759653d5b46ada514357c3124a88f30b8016
parentda2361ac1df04934246c4e7d22cf0951b75836c4 (diff)
downloadcpython-9284a572bc22c31a965ebc03d428ec6145f70c73.zip
cpython-9284a572bc22c31a965ebc03d428ec6145f70c73.tar.gz
cpython-9284a572bc22c31a965ebc03d428ec6145f70c73.tar.bz2
Patch by Moshe Zadka: move the string special case from abstract.c
here. [Patch modified by GvR to keep the original exception.]
-rw-r--r--Objects/stringobject.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index bc1bb41..77c08dd 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -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 = {