Use pre-created string objects for most common exceptions
(especially IndexError which is caught by 'for')
diff --git a/Objects/listobject.c b/Objects/listobject.c
index b3e3378..17307f7 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -97,6 +97,8 @@
return ((listobject *)op) -> ob_size;
}
+static object *indexerr;
+
object *
getlistitem(op, i)
object *op;
@@ -107,7 +109,9 @@
return NULL;
}
if (i < 0 || i >= ((listobject *)op) -> ob_size) {
- err_setstr(IndexError, "list index out of range");
+ if (indexerr == NULL)
+ indexerr = newstringobject("list index out of range");
+ err_setval(IndexError, indexerr);
return NULL;
}
return ((listobject *)op) -> ob_item[i];
@@ -274,7 +278,9 @@
int i;
{
if (i < 0 || i >= a->ob_size) {
- err_setstr(IndexError, "list index out of range");
+ if (indexerr == NULL)
+ indexerr = newstringobject("list index out of range");
+ err_setval(IndexError, indexerr);
return NULL;
}
INCREF(a->ob_item[i]);