47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2008 Slava Pestov.
 | |
| ! See http://factorcode.org/license.txt for BSD license.
 | |
| USING: namespaces assocs kernel accessors sequences fry
 | |
| compiler.tree compiler.tree.combinators ;
 | |
| IN: compiler.tree.normalization.renaming
 | |
| 
 | |
| SYMBOL: rename-map
 | |
| 
 | |
| : rename-value ( value -- value' )
 | |
|     [ rename-map get at ] keep or ;
 | |
| 
 | |
| : rename-values ( values -- values' )
 | |
|     dup empty? [ rename-map get '[ [ _ at ] keep or ] map ] unless ;
 | |
| 
 | |
| : add-renamings ( old new -- )
 | |
|     [ rename-values ] dip
 | |
|     rename-map get '[ _ set-at ] 2each ;
 | |
| 
 | |
| GENERIC: rename-node-values* ( node -- node )
 | |
| 
 | |
| M: #introduce rename-node-values* ;
 | |
| 
 | |
| M: #shuffle rename-node-values*
 | |
|     [ rename-values ] change-in-d
 | |
|     [ rename-values ] change-in-r
 | |
|     [ [ rename-value ] assoc-map ] change-mapping ;
 | |
| 
 | |
| M: #push rename-node-values* ;
 | |
| 
 | |
| M: #terminate rename-node-values*
 | |
|     [ rename-values ] change-in-d
 | |
|     [ rename-values ] change-in-r ;
 | |
| 
 | |
| M: #phi rename-node-values*
 | |
|     [ [ rename-values ] map ] change-phi-in-d ;
 | |
| 
 | |
| M: #declare rename-node-values*
 | |
|     [ [ [ rename-value ] dip ] assoc-map ] change-declaration ;
 | |
| 
 | |
| M: #alien-callback rename-node-values* ;
 | |
| 
 | |
| M: node rename-node-values*
 | |
|     [ rename-values ] change-in-d ;
 | |
| 
 | |
| : rename-node-values ( nodes -- nodes' )
 | |
|     dup [ rename-node-values* drop ] each-node ;
 |