stack の動作を机上で確認 (2)
出かける、と言いつつ連れとのドッキングが 1900 頃との事にてもう少し。
POP_CONT 直後
以下なカンジに復元 ?
sp,argp>| prev | +-------+ | size | <- 2? | info | <- #f? env>| up | <- NULL? +-------+ | j | | i | +-------+
ちなみに cont は NULL になりますし、pc は call の次。
以降
なインストラクションを再掲。
9 CONSTI-PUSH(1) 10 CONSTI-PUSH(2) 11 LREF0 ; y 12 TAIL-CALL(2) ; (y 1 2) 13 RET
push 二発で以下?
sp>| | | 2 | argp>| 1 | +-------+ | size | <- 2? | info | <- #f? env>| up | <- NULL? +-------+ | j | | i | +-------+
で、LREF0 で j が取り出されて val0 格納。ここは初体験ゾーンですな。
TAIL-CALL
ここもナニ。このケイスだと以下になりますか?
sp>| up | +-------+ | 2 | argp>| 1 | +-------+
で、env は NULL になる。末尾なので、という事ッスか。で、CALL の中で argc は 0 ではないので FINISH_ENV マクロがナニ。
argp,sp>| | +-------+ | size | | info | env>| up | +-------+ | 2 | | 1 | +-------+
になっちゃった。ここから RET する時って CONT が NULL なのでいきなり return しますな。stack ってどうなってしまうんでしょ。
しかもそろそろ出掛ける時間らしい。タイムアップ。もう少しゆっくり確認な必要あり。