Consumer objectについては、マージャを例として説明する(runtime/gmerge.c)
Consumerオブジェクトを記述するに必要なマクロ群は include/klic/gc_macro.hに記述されている。また、マクロの名称は 一般的にはGC_, またはGCDEF_で開始されている。
consumer object は 変数に フックしたゴール列である中断構造中のフック鎖の中に入っている。 通常の KL1 項とフックされた変数の active unify 時に、 鎖をたどっていった 実行時カーネルが consumer object を 見つけた場合に、このメソッドを呼び出す。
引数として、単一化対象の他のデータ、そしてヒープ割付点へのポインタを取
る。例えば、 merger の入力ストリームに vector を 単一化する時の
処理から分かるように、このメソッドの中身は通常かなり複雑なものになる。
メソッド実行の結果としては、成功、中断、GC要求の3種類である。
それぞれの状態に対応する値
を大域変数を通して返す。
active unification には goal の エンキューを行うなど、
ヒープを消費する場合があるので、
メソッド引数として、ヒープ割付点へのポインタを持ち、
メソッドの返り値として、メソッド実行後の新たな
ヒープ割付点ポインタを返す。
GCDEF_UNIFY()により定義される。ここで利用されている主な マクロ群の解説を行う。