cstack 属性
うーん ... 薬で体調微妙。
とりあえず cstack の続きをくずくずと確認中。とりあえず throw_continuation() 手続きの
ScmEscapePoint *ep = (ScmEscapePoint*)data; ScmObj args = argframe[0]; ScmVM *vm = theVM; if (vm->cstack != ep->cstack) {
な分岐の意味がナニ。
ここ時点の ep->cstack って上記によれば call/cc した時点の vm->cstack になるはずなので、vm->cstack が更新される箇所を見れば上記の分岐に入る条件が分かる?
確認してみたんですが
- Scm_VMUnwindProtect() 手続き
- Scm_VMNextHandler() 手続き
- Scm_VMRewindProtect() 手続き
あたりらしい。全然本調子ではないので勘弁して下さひ。
とりあえず
上記ビンゴとしてもそれぞれがどういった状態で呼び出されるか、が理解できてないので、そちら方面の確認が必要。