#define link() (*--sp=fp ,fp=sp)
#define unlk() (sp=fp, fp=*sp++)
とある。何をしているんだろうか?
spはスタックポインタだ。
新しく関数を実行したい。引数が2個以上だ。
こんなとき、スタックを利用する。
はじめる前に link() を実行し。そのときの
スタックポインタをfpに保存する。
「fpから関数処理に必要なデータがあるよ」
と言っている。
その関数処理が終わったら、
その前の関数処理を続けるため
fpの前の状態はスタックに保存する
2引数なら、*(fp-1)に第1引数の評価結果
*(fp-2)に関数定義を入れる。
第2引数の評価結果xを得たら
x,*(fp-1),*(fp-2)を使って関数を実行
*(fp-1)は *sp++ と記述してある。
終わったら、その前の関数処理に戻すため
unlk() を使い、sp, fp の値を戻す。
難しい、難しい