[pypy-commit] pypy less-stringly-ops: Do not create so many useless implicit exception blocks
rlamy
noreply at buildbot.pypy.org
Mon Aug 19 23:15:24 CEST 2013
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: less-stringly-ops
Changeset: r66246:67521a7fb22d
Date: 2013-08-12 16:23 +0100
http://bitbucket.org/pypy/pypy/changeset/67521a7fb22d/
Log: Do not create so many useless implicit exception blocks
diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -456,7 +456,7 @@
self.guessexception(op.canraise)
return op.result
- def guessexception(self, exceptions):
+ def guessexception(self, exceptions, force=False):
"""
Catch possible exceptions implicitly.
@@ -465,6 +465,11 @@
even if the interpreter re-raises the exception, it will not be the
same ImplicitOperationError instance internally.
"""
+ if not force and not any(isinstance(block, (ExceptBlock, FinallyBlock))
+ for block in self.blockstack):
+ # The implicit exception wouldn't be caught and would later get
+ # removed, so don't bother creating it.
+ return
self.recorder.guessexception(self, *exceptions)
def build_flow(self):
diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py
--- a/rpython/flowspace/objspace.py
+++ b/rpython/flowspace/objspace.py
@@ -228,7 +228,7 @@
frame.replace_in_stack(it, next_unroller)
return const(v)
w_item = frame.do_operation("next", w_iter)
- frame.guessexception([StopIteration, RuntimeError])
+ frame.guessexception([StopIteration, RuntimeError], force=True)
return w_item
More information about the pypy-commit
mailing list