インストラクション

直前エントリにて_Gauche の vm.c 見てるんですがどれも微妙_と残してるんですが、わしレベルの適当なインストラクションが無くって、と。
で、Reading Gauche の VM インストラクションなドキュメント見てるに_PUSH も近いうちに読みましょう_との記述を発見。
これだ!!と言いつつも disasm で PUSH なインストラクションが出てくる場面がイメージできない。やっぱレベル的に微妙だよ、と思いつつ google 先生にお伺いを立ててみると shiro さんが書かれたドキュメントに hit した。
以下でナニ

gosh> (define (fold proc seed lis)

  (define (loop seed lis)

    (if (null? lis)

      seed

      (loop (proc seed (car lis)) (cdr lis))))

  (loop seed lis))
fold
gosh> (disasm fold)
main_code (name=fold, code=0x8145d80, size=22, const=0, stack=23):
args: #f
     0 LREF1-PUSH               ; seed
     1 LREF0-PUSH               ; lis
     2 LOCAL-ENV(2)             ; (loop seed lis)
     3 LREF0                    ; lis
     4 BNNULL 8                 ; (null? lis)
     6 LREF1                    ; seed
     7 RET 
     8 PRE-CALL(2) 15
    10 LREF1-PUSH               ; seed
    11 LREF0                    ; lis
    12 CAR-PUSH                 ; (car lis)
    13 LREF12                   ; proc
    14 CALL(2)                  ; (proc seed (car lis))
    15 PUSH 
    16 LREF0                    ; lis
    17 CDR-PUSH                 ; (cdr lis)
    18 LOCAL-ENV-JUMP(1) 3      ; (loop (proc seed (car lis)) (cdr lis))
    20 RET 
    21 RET 
#<undef>
gosh> 

む。再帰な手続き呼び出しの引数で手続きをナニすりゃ良いのかな。

とりあえず

PUSH なインストラクションに立候補しておきます。

そういえば

ひげぽんさん、Monar 0.0.1 リリースおめでとうございます♪
http://code.google.com/p/monar/

追記

そういえば、って失礼だなぁ。スミマセン (汗