豊福@パパイヤです。

前田さん
> トップレベルのローカル変数はスタックに割り当てられるのですが、ス
> タックのコピーをする時に、トップレベルのローカル変数はコピーされ
> ないようになっているみたいです。

  そういうことでしたか。

では、私の想像の訂正です。
私(豊福)
| 「スタックの深い方へ継続するときはジャンプ前のスタックポインタ
| からジャンプ後のスタックポインタまでの差分分のスタックだけを
| 復活して継続する。上の例では (0..2) の eachメソッドのスコープ
| に関するスタック(ループカウンタがここに入る)だけが復活した
| ので、ループカウンタの値だけが callcc時の値(つまりループの
| 1回目)に戻った。」
| と想像したのですがあってるでしょうか。

  この考えはまったく間違いで、

「継続すると本来はすべてのスタックおよびローカル変数を復活する。
ただし現在の実装ではトップレベルのローカル変数とブロック変数は
戻らない」
  原さんの例ではたまたまトップレベルのローカル変数がからんでいた
ので上のような間違った想像をした。

ですね。
---
                        豊福@パパイヤ
                        unbound / papaya.juice.or.jp
                        toyofuku / juice.or.jp