Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 506:9f7161db5669 legacy-trunk
Negative subscript are now allowed as in slices.
Added ImportError.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 24 Dec 1991 13:25:19 +0000 |
| parents | dc0463453a64 |
| children | 5faf93eb9256 |
line wrap: on
line diff
--- a/Python/ceval.c Tue Dec 24 13:24:53 1991 +0000 +++ b/Python/ceval.c Tue Dec 24 13:25:19 1991 +0000 @@ -1511,6 +1511,8 @@ return NULL; } i = getintvalue(w); + if (i < 0) + i += (*tp->tp_as_sequence->sq_length)(v); return (*tp->tp_as_sequence->sq_item)(v, i); } return (*tp->tp_as_mapping->mp_subscript)(v, w); @@ -1584,11 +1586,15 @@ (func = sq->sq_ass_item) != NULL) { if (!is_intobject(key)) { err_setstr(TypeError, - "sequence subscript must be integer"); + "sequence subscript must be integer (assign or del)"); return -1; } - else - return (*func)(w, (int)getintvalue(key), v); + else { + int i = getintvalue(key); + if (i < 0) + i += (*sq->sq_length)(v); + return (*func)(w, i, v); + } } else if ((mp = tp->tp_as_mapping) != NULL && (func = mp->mp_ass_subscript) != NULL) { @@ -1726,8 +1732,6 @@ return v; } -/* XXX This function should use dict2 variants (change interface!) */ - static int import_from(locals, v, name) object *locals; @@ -1746,7 +1750,7 @@ x = dict2lookup(w, name); if (x == NULL) { /* XXX can't happen? */ - err_setstr(NameError, getstringvalue(name)); + err_setstr(SystemError, getstringvalue(name)); return -1; } if (dict2insert(locals, name, x) != 0) @@ -1757,7 +1761,10 @@ else { x = dict2lookup(w, name); if (x == NULL) { - err_setstr(NameError, getstringvalue(name)); + char buf[250]; + sprintf(buf, "cannot import name %s", + getstringvalue(name)); + err_setstr(ImportError, buf); return -1; } else
