[pypy-commit] pypy translation-cleanup: Simplify BlockRecorder.guessbool()/.guessexception()

rlamy noreply at buildbot.pypy.org
Thu Sep 20 19:39:02 CEST 2012


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: translation-cleanup
Changeset: r57418:984bdf829a80
Date: 2012-09-12 21:03 +0100
http://bitbucket.org/pypy/pypy/changeset/984bdf829a80/

Log:	Simplify BlockRecorder.guessbool()/.guessexception()

diff --git a/pypy/objspace/flow/flowcontext.py b/pypy/objspace/flow/flowcontext.py
--- a/pypy/objspace/flow/flowcontext.py
+++ b/pypy/objspace/flow/flowcontext.py
@@ -121,11 +121,11 @@
             # before.
             self.last_join_point = frame.getstate()
 
-    def guessbool(self, ec, w_condition, cases=[False,True]):
+    def guessbool(self, ec, w_condition):
         block = self.crnt_block
         vars = block.getvariables()
         links = []
-        for case in cases:
+        for case in [False, True]:
             egg = EggBlock(vars, block, case)
             ec.pendingblocks.append(egg)
             link = Link(vars, egg, case)
@@ -139,36 +139,28 @@
         # block.exits[True] = ifLink.
         raise StopFlowing
 
-    def guessexception(self, ec, cases):
-        def replace_exc_values(case):
-            if case is not Exception:
-                yield 'last_exception', Constant(case)
-                yield 'last_exc_value', Variable('last_exc_value')
-            else:
-                yield 'last_exception', Variable('last_exception')
-                yield 'last_exc_value', Variable('last_exc_value')
+    def guessexception(self, ec, *cases):
         block = self.crnt_block
         bvars = vars = vars2 = block.getvariables()
         links = []
-        first = True
-        attach = {}
-        for case in cases:
-            if first:
-                first = False
-            else:
+        for case in [None] + list(cases):
+            if case is not None:
                 assert block.operations[-1].result is bvars[-1]
                 vars = bvars[:-1]
                 vars2 = bvars[:-1]
-                for name, newvar in replace_exc_values(case):
-                    attach[name] = newvar
-                    vars.append(newvar)
-                    vars2.append(Variable())
+                if case is Exception:
+                    last_exc = Variable('last_exception')
+                else:
+                    last_exc = Constant(case)
+                last_exc_value = Variable('last_exc_value')
+                vars.extend([last_exc, last_exc_value])
+                vars2.extend([Variable(), Variable()])
             egg = EggBlock(vars2, block, case)
             ec.pendingblocks.append(egg)
             link = Link(vars, egg, case)
-            if attach:
-                link.extravars(**attach)
-                egg.extravars(**attach) # xxx
+            if case is not None:
+                link.extravars(last_exception=last_exc, last_exc_value=last_exc_value)
+                egg.extravars(last_exception=last_exc)
             links.append(link)
 
         block.exitswitch = c_last_exception
@@ -213,7 +205,7 @@
         return self.recorder.guessbool(self, w_condition, **kwds)
 
     def guessexception(self, *classes):
-        outcome = self.recorder.guessexception(self, cases=[None] + list(classes))
+        outcome = self.recorder.guessexception(self, *classes)
         if outcome is None:
             w_exc_cls, w_exc_value = None, None
         else:


More information about the pypy-commit mailing list