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