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 に格納されて) いる
とりあえずこれを投入してやれ。
# 乱暴だなぁ ...