Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r69269:311bb87a8956
Date: 2014-02-22 10:58 +0100
http://bitbucket.org/pypy/pypy/changeset/311bb87a8956/

Log:    Use the RPython-level detection of out-of-bound indices. This
        should give better code when jitted (lower number of guards).

diff --git a/pypy/objspace/std/bytearrayobject.py 
b/pypy/objspace/std/bytearrayobject.py
--- a/pypy/objspace/std/bytearrayobject.py
+++ b/pypy/objspace/std/bytearrayobject.py
@@ -40,7 +40,11 @@
         return len(self.data)
 
     def _getitem_result(self, space, index):
-        return space.wrap(ord(self.data[index]))
+        try:
+            character = self.data[index]
+        except IndexError:
+            raise oefmt(space.w_IndexError, "bytearray index out of range")
+        return space.wrap(ord(character))
 
     def _val(self, space):
         return space.bufferstr_w(self)
diff --git a/pypy/objspace/std/stringmethods.py 
b/pypy/objspace/std/stringmethods.py
--- a/pypy/objspace/std/stringmethods.py
+++ b/pypy/objspace/std/stringmethods.py
@@ -78,15 +78,15 @@
                 return self._new_from_list(ret)
 
         index = space.getindex_w(w_index, space.w_IndexError, "string index")
-        selflen = self._len()
-        if index < 0:
-            index += selflen
-        if index < 0 or index >= selflen:
-            raise oefmt(space.w_IndexError, "string index out of range")
         return self._getitem_result(space, index)
 
     def _getitem_result(self, space, index):
-        return self._new(self._val(space)[index])
+        selfvalue = self._val(space)
+        try:
+            character = selfvalue[index]
+        except IndexError:
+            raise oefmt(space.w_IndexError, "string index out of range")
+        return self._new(character)
 
     def descr_getslice(self, space, w_start, w_stop):
         selfvalue = self._val(space)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to