Module Generator__.Pushout
val functor_of : (string * Analyzer.b_arg list) -> string * intval push_local_atom : ('a * int) list -> Generator__.Register_table.reg_tbl -> ('a * (string * Analyzer.b_arg list)) -> Generator__.Register_table.reg_tbl * (('a * int) * Generator__.Instruction.rhs_inst)局所リンクに参照されるアトムを生成する命令を生成する
val push_local_atoms : (int * int) list -> Generator__.Register_table.reg_tbl -> (int * (string * Analyzer.b_arg list)) list -> Generator__.Register_table.reg_tbl * ((int * int) list * Generator__.Instruction.rhs_inst list)局所リンクに参照されるアトムを生成する命令のリストを生成する
- 戻り値は
reg_tbl, (local2reg_i, push_atoms) - ただし,
local2reg_iは局所リンク名とレジスタ番号の連想リスト push_atomsは PushAtom 命令のリスト
- 戻り値は
val replace_free_atom : ('a * Generator__.Instruction.reg_i) list -> ('a * (string * Analyzer.b_arg list)) -> Generator__.Instruction.rhs_inst自由リンクに参照されるアトムを置き換える命令を生成する
val replace_free_atoms : (string * Generator__.Instruction.reg_i) list -> (string * (string * Analyzer.b_arg list)) list -> Generator__.Instruction.rhs_inst list自由リンクに参照されるアトムを置き換える命令のリストを生成する
val get_arg : ((string * 'a) list * (int * 'a) list) -> Analyzer.b_arg -> 'aリンクが参照するアドレスが格納されたレジスタ番号を取得する
free2reg_iはマッチング終了後のreg_tbl.free2reg_ilocal2reg_iはpush_local_atomsによって得られた連想リストreg_tbl.local2reg_iではない
val set_link : ((string * Generator__.Instruction.reg_i) list * (int * Generator__.Instruction.reg_i) list) -> Generator__.Instruction.reg_i -> (int * Analyzer.b_arg) -> Generator__.Instruction.rhs_instval set_links_of_atom : ('a * Generator__.Instruction.reg_i) list -> ((string * Generator__.Instruction.reg_i) list * (int * Generator__.Instruction.reg_i) list) -> ('a * ('b * Analyzer.b_arg list)) -> Generator__.Instruction.rhs_inst list局所リンク・自由リンクに参照される(シンボル)アトムのリンクをセットする命令のリストを生成する
link2reg_iは局所リンクに参照されるアトムを生成する場合はlocal2reg_i, 自由リンクに参照されるアトムを生成する場合はfree2reg_i
val set_links_of_atoms : ('a * Generator__.Instruction.reg_i) list -> ((string * Generator__.Instruction.reg_i) list * (int * Generator__.Instruction.reg_i) list) -> ('a * ('b * Analyzer.b_arg list)) list -> Generator__.Instruction.rhs_inst listval free_local_atom : Generator__.Instruction.reg_i -> Generator__.Instruction.rhs_instルール左辺で局所に参照されていたアトムを消去する命令を生成する
val free_local_atoms : Generator__.Instruction.reg_i list -> Generator__.Instruction.rhs_inst listルール左辺で局所に参照されていたアトムを消去する命令のリストを生成する
val redir_of : ('a * Generator__.Instruction.reg_i) list -> ('a * 'a) -> Generator__.Instruction.rhs_instリダイレクトを行う命令を生成する
val redirs_of : (string * Generator__.Instruction.reg_i) list -> (string * string) list -> Generator__.Instruction.rhs_inst listリダイレクトを行う命令のリストを生成する
val push_atoms : Generator__.Register_table.reg_tbl -> (int * int) list -> ((int * (string * Analyzer.b_arg list)) list * (string * (string * Analyzer.b_arg list)) list * (string * string) list) -> int * Generator__.Instruction.rhs_inst list確保すべきレジスタのサイズと生成した命令列を返す