Module Generator__.Pushout

val functor_of : (string * Analyzer.b_arg list) -> string * int
val 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_i
  • local2reg_ipush_local_atoms によって得られた連想リスト
  • reg_tbl.local2reg_i ではない

局所リンク・自由リンクに参照される(シンボル)アトムのリンクをセットする命令のリストを生成する

  • link2reg_i は局所リンクに参照されるアトムを生成する場合は local2reg_i, 自由リンクに参照されるアトムを生成する場合は free2reg_i
val 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

確保すべきレジスタのサイズと生成した命令列を返す