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 ;
|