1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays assocs fry functors generic.parser
4 kernel lexer namespaces parser sequences slots words sets
5 compiler.cfg.def-use compiler.cfg.instructions
6 compiler.cfg.instructions.syntax ;
7 IN: compiler.cfg.renaming.functor
9 : slot-change-quot ( slots quot -- quot' )
10 '[ [ _ ] dip changer-word [ ] 2sequence ] map [ ] join
13 FUNCTOR: define-renaming ( NAME DEF-QUOT USE-QUOT TEMP-QUOT -- )
15 rename-insn-defs DEFINES ${NAME}-insn-defs
16 rename-insn-uses DEFINES ${NAME}-insn-uses
17 rename-insn-temps DEFINES ${NAME}-insn-temps
21 GENERIC: rename-insn-defs ( insn -- )
23 M: insn rename-insn-defs drop ;
25 insn-classes get [ insn-def-slot ] filter [
26 [ \ rename-insn-defs create-method-in ]
27 [ insn-def-slot name>> 1array DEF-QUOT slot-change-quot ] bi
31 GENERIC: rename-insn-uses ( insn -- )
33 M: insn rename-insn-uses drop ;
35 insn-classes get { ##phi } diff [ insn-use-slots empty? not ] filter [
36 [ \ rename-insn-uses create-method-in ]
37 [ insn-use-slots [ name>> ] map USE-QUOT slot-change-quot ] bi
41 M: ##phi rename-insn-uses
42 [ USE-QUOT assoc-map ] change-inputs drop ;
44 GENERIC: rename-insn-temps ( insn -- )
46 M: insn rename-insn-temps drop ;
48 insn-classes get [ insn-temp-slots empty? not ] filter [
49 [ \ rename-insn-temps create-method-in ]
50 [ insn-temp-slots [ name>> ] map TEMP-QUOT slot-change-quot ] bi
56 SYNTAX: RENAMING: scan scan-object scan-object scan-object define-renaming ;