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 RETpush 二発で以下?
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 ってどうなってしまうんでしょ。
しかもそろそろ出掛ける時間らしい。タイムアップ。もう少しゆっくり確認な必要あり。