summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/abstract.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 7458b94..123455a 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -232,8 +232,11 @@ PyObject_GetItem(o, key)
if (m && m->mp_subscript)
return m->mp_subscript(o, key);
- if (PyInt_Check(key))
- return PySequence_GetItem(o, PyInt_AsLong(key));
+ if (o->ob_type->tp_as_sequence) {
+ if (PyInt_Check(key))
+ return PySequence_GetItem(o, PyInt_AsLong(key));
+ return type_error("sequence index must be integer");
+ }
return type_error("unsubscriptable object");
}
@@ -254,8 +257,12 @@ PyObject_SetItem(o, key, value)
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, value);
- if (PyInt_Check(key))
- return PySequence_SetItem(o, PyInt_AsLong(key), value);
+ if (o->ob_type->tp_as_sequence) {
+ if (PyInt_Check(key))
+ return PySequence_SetItem(o, PyInt_AsLong(key), value);
+ type_error("sequence index must be integer");
+ return -1;
+ }
type_error("object does not support item assignment");
return -1;
@@ -276,8 +283,12 @@ PyObject_DelItem(o, key)
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, (PyObject*)NULL);
- if (PyInt_Check(key))
- return PySequence_DelItem(o, PyInt_AsLong(key));
+ if (o->ob_type->tp_as_sequence) {
+ if (PyInt_Check(key))
+ return PySequence_DelItem(o, PyInt_AsLong(key));
+ type_error("sequence index must be integer");
+ return -1;
+ }
type_error("object does not support item deletion");
return -1;