[pypy-commit] pypy default: Argh. Turning "try: list[index]; except IndexError" into "try:

arigo noreply at buildbot.pypy.org
Tue Jul 30 20:10:52 CEST 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r65823:1e4a202133e5
Date: 2013-07-30 20:09 +0200
http://bitbucket.org/pypy/pypy/changeset/1e4a202133e5/

Log:	Argh. Turning "try: list[index]; except IndexError" into "try:
	method(index); except IndexError" just doesn't work in RPython after
	translation. Grrr.

diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -195,11 +195,10 @@
             raise BadVirtualState
         if not value.is_virtual():
             raise BadVirtualState
+        if len(self.fieldstate) > value.getlength():
+            raise BadVirtualState
         for i in range(len(self.fieldstate)):
-            try:
-                v = value.get_item_value(i)
-            except IndexError:
-                raise BadVirtualState
+            v = value.get_item_value(i)
             s = self.fieldstate[i]
             if s.position > self.position:
                 s.enum_forced_boxes(boxes, v, optimizer)
@@ -269,13 +268,13 @@
             raise BadVirtualState
         if not value.is_virtual():
             raise BadVirtualState
+        if len(self.fielddescrs) > len(value._items):
+            raise BadVirtualState
         p = 0
         for i in range(len(self.fielddescrs)):
             for j in range(len(self.fielddescrs[i])):
                 try:
                     v = value._items[i][self.fielddescrs[i][j]]
-                except IndexError:
-                    raise BadVirtualState
                 except KeyError:
                     raise BadVirtualState
                 s = self.fieldstate[p]


More information about the pypy-commit mailing list