mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	move pruneNext method to correct object (doh!)
This commit is contained in:
		
							parent
							
								
									314e3fb215
								
							
						
					
					
						commit
						eefaeb78b3
					
				
					 2 changed files with 48 additions and 48 deletions
				
			
		|  | @ -120,30 +120,6 @@ def getContainedGraphs(self): | |||
|             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 @@ def addNext(self, 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]) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jeremy Hylton
						Jeremy Hylton