| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  | ! 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' )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     dup empty? [ rename-map get '[ [ _ at ] keep or ] map ] unless ;
 | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : 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 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     [ rename-values ] change-in-r | 
					
						
							| 
									
										
										
										
											2008-09-12 06:17:27 -04:00
										 |  |  |     [ [ 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 ;
 |