CONS-PUSH

微妙に調子悪く、現実トウヒ。次の instruction はボリューム少なめ、でご勘弁頂こうと思っております。m(__)m
で、表記の CONS-PUSH なソレですが、使用例としては以下で良いのでしょうか。

gosh> (disasm (lambda (f) (f (cons 1 2))))
main_code (name=#f, code=0x80d7b40, size=6, const=0, stack=4):
args: #f
     0 CONSTI-PUSH(1) 
     1 CONSTI(2) 
     2 CONS-PUSH                ; (cons 1 2)
     3 LREF0                    ; f
     4 TAIL-CALL(1)             ; (f (cons 1 2))
     5 RET 
#<undef>
gosh> 

手続きの中身としては

            CASE(SCM_VM_CONS_PUSH) {
                ScmObj ca;
                POP_ARG(ca);
                VAL0 = Scm_Cons(ca, VAL0);
                PUSH_ARG(VAL0);
                NEXT;
            }

となっているので disasm したソレとも整合してますな。

  • 最初の引数は push されて (中で pop されて) いる
  • 次の引数は val0 から取り出して (CONSTI で val0 に格納されて) いる

とりあえずこれを投入してやれ。
# 乱暴だなぁ ...