PostScript のコードが末尾再帰が最適化がされているか処理系で動くコードから判定できるか

の PostScript 版
http://www.adobe.com/products/postscript/pdfs/PLRM.pdf の 3.5.5 章によると PostScript は末尾再帰を最適化して execution stack があふれないようにするそうな。
PostScript には countexecstack という手続きがあるのでそれを使って確かめてみる。f は末尾再帰で g は末尾再帰じゃない手続き。

/f{
    dup 0 eq{
        % 引数が 0 の場合その時点での execution stack の深さを数えてスタックに積む
        pop countexecstack
    }{
        % 引数が 0 以外の場合引数から 1 引いて再帰
        1 sub f
    }ifelse
}def

/g{
    dup 0 eq{
        pop countexecstack
    }{
        1 sub g
    }ifelse
    0 pop % 何の効果もない事をする
}def

/is_tail_opt{
    1 dict begin
        /func exch def
        countexecstack 100 func eq
    end
}def

Ghostscript で実行すると

GS> {f} is_tail_opt =
true
GS> {g} is_tail_opt =
false

判定できている。