diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-11-06 03:47:39 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-11-06 03:47:39 (GMT) |
commit | eefaeb78b372f542a70b8b44352852c14549696a (patch) | |
tree | 4c03010a9dc4472e2b58992ebc4564315feb755e /Lib/compiler | |
parent | 314e3fb215c4e96a8c5523061623d8439ab4c2dc (diff) | |
download | cpython-eefaeb78b372f542a70b8b44352852c14549696a.zip cpython-eefaeb78b372f542a70b8b44352852c14549696a.tar.gz cpython-eefaeb78b372f542a70b8b44352852c14549696a.tar.bz2 |
move pruneNext method to correct object (doh!)
Diffstat (limited to 'Lib/compiler')
-rw-r--r-- | Lib/compiler/pyassem.py | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py index 0b6701e..9f9e904 100644 --- a/Lib/compiler/pyassem.py +++ b/Lib/compiler/pyassem.py @@ -120,30 +120,6 @@ class FlowGraph: l.extend(b.getContainedGraphs()) return l - _uncond_transfer = ('RETURN_VALUE', 'RAISE_VARARGS', - 'JUMP_ABSOLUTE', 'JUMP_FORWARD') - - def pruneNext(self): - """Remove bogus edge for unconditional transfers - - Each block has a next edge that accounts for implicit control - transfers, e.g. from a JUMP_IF_FALSE to the block that will be - executed if the test is true. - - These edges must remain for the current assembler code to - work. If they are removed, the dfs_postorder gets things in - weird orders. However, they shouldn't be there for other - purposes, e.g. conversion to SSA form. This method will - remove the next edge when it follows an unconditional control - transfer. - """ - try: - op, arg = self.insts[-1] - except (IndexError, TypeError): - return - if op in self._uncond_transfer: - self.next = [] - def dfs_postorder(b, seen): """Depth-first search of tree rooted at b, return in postorder""" order = [] @@ -197,6 +173,30 @@ class Block: self.next.append(block) assert len(self.next) == 1, map(str, self.next) + _uncond_transfer = ('RETURN_VALUE', 'RAISE_VARARGS', + 'JUMP_ABSOLUTE', 'JUMP_FORWARD') + + def pruneNext(self): + """Remove bogus edge for unconditional transfers + + Each block has a next edge that accounts for implicit control + transfers, e.g. from a JUMP_IF_FALSE to the block that will be + executed if the test is true. + + These edges must remain for the current assembler code to + work. If they are removed, the dfs_postorder gets things in + weird orders. However, they shouldn't be there for other + purposes, e.g. conversion to SSA form. This method will + remove the next edge when it follows an unconditional control + transfer. + """ + try: + op, arg = self.insts[-1] + except (IndexError, ValueError): + return + if op in self._uncond_transfer: + self.next = [] + def get_children(self): if self.next and self.next[0] in self.outEdges: self.outEdges.remove(self.next[0]) |