[Python-checkins] CVS: python/dist/src/Tools/compiler/compiler pyassem.py,1.14,1.15

Jeremy Hylton python-dev@python.org
Sun, 5 Nov 2000 19:47:41 -0800


Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler
In directory slayer.i.sourceforge.net:/tmp/cvs-serv19954/compiler
Modified Files:
	pyassem.py 
Log Message:
move pruneNext method to correct object (doh!)
Index: pyassem.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pyassem.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** pyassem.py	2000年11月06日 03:43:11	1.14
--- pyassem.py	2000年11月06日 03:47:39	1.15
***************
*** 121,148 ****
 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"""
--- 121,124 ----
***************
*** 197,200 ****
--- 173,200 ----
 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):

AltStyle によって変換されたページ (->オリジナル) /