datcontag 関数の生成

datcontag 関数は datcon 関数とよく似ています。 あるデータ型が与えられたとき、その datcontag 関数はそのデータ型の値を取り、その値をコンストラクトした (最外の) コンストラクタに割り当てられた (小さな整数である) タグを返します。 データ型 expr の datcontag 関数の生成を (ATS コンパイラに) 指示するのに次の命令が使えます:

#codegen2("datcontag", expr)

デフォルトでは、生成された関数の名前は datcontag_expr になります。 もし異なる名前にしたければ、#codegen2 命令の第三引数にその名前を渡します。 例えば、次の命令は my_datcontag_expr の名前で関数を生成することを示しています:

#codegen2("datcontag", expr, my_datcontag_expr)

datcontag_expr を実装する次の ATS コードが生成されます:

(* ****** ****** *) // implement {}(*tmp*) datcontag_expr (arg0) = ( case+ arg0 of | Int _ => 0 | Var _ => 1 | Add _ => 2 | Sub _ => 3 | Mul _ => 4 | Div _ => 5 | Ifgtz _ => 6 | Ifgtez _ => 7 ) // (* ****** ****** *)

生成されたコードを正しくコンパイルするために、関数テンプレート datcontag_expr がどこかで宣言される必要があることに注意してください:

fun{} datcontag_expr : (expr) -> intGte(0) // a function template

この章で示した例の全体と (コード生成のプロセスを説明する) Makefile は オンライン から入手できます。