summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/listobject.c15
-rw-r--r--Objects/rangeobject.c25
-rw-r--r--Objects/tupleobject.c6
3 files changed, 46 insertions, 0 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 922444e..3bb5aec 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1489,6 +1489,13 @@ PyTypeObject PyList_Type = {
0, /*tp_as_number*/
&list_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
};
@@ -1540,6 +1547,7 @@ static PySequenceMethods immutable_list_as_sequence = {
(intintargfunc)list_slice, /*sq_slice*/
(intobjargproc)immutable_list_ass, /*sq_ass_item*/
(intintobjargproc)immutable_list_ass, /*sq_ass_slice*/
+ (objobjproc)list_contains, /*sq_contains*/
};
static PyTypeObject immutable_list_type = {
@@ -1557,5 +1565,12 @@ static PyTypeObject immutable_list_type = {
0, /*tp_as_number*/
&immutable_list_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
};
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 807cf51..86144ca 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -237,6 +237,23 @@ range_getattr(r, name)
return Py_FindMethod(range_methods, (PyObject *) r, name);
}
+static int
+range_contains(r, obj)
+ rangeobject * r;
+ PyObject * obj;
+{
+ long num = PyInt_AsLong(obj);
+
+ if (num < 0 && PyErr_Occurred())
+ return -1;
+
+ if (num < r->start || (num - r->start) % r->step)
+ return 0;
+ if (num > (r->start + (r->len * r->step)))
+ return 0;
+ return 1;
+}
+
static PySequenceMethods range_as_sequence = {
(inquiry)range_length, /*sq_length*/
(binaryfunc)range_concat, /*sq_concat*/
@@ -245,6 +262,7 @@ static PySequenceMethods range_as_sequence = {
(intintargfunc)range_slice, /*sq_slice*/
0, /*sq_ass_item*/
0, /*sq_ass_slice*/
+ (objobjproc)range_contains, /*sq_contains*/
};
PyTypeObject PyRange_Type = {
@@ -262,4 +280,11 @@ PyTypeObject PyRange_Type = {
0, /*tp_as_number*/
&range_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
};
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index c26b7df..451e794 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -447,6 +447,12 @@ PyTypeObject PyTuple_Type = {
&tuple_as_sequence, /*tp_as_sequence*/
0, /*tp_as_mapping*/
(hashfunc)tuplehash, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
};
/* The following function breaks the notion that tuples are immutable: