ScmVMPushCC
Gauche:YAGHG:VM:Insn:RET に_Scm_VMPushCC によって積まれる C-continuation_という記述がある。逆に言えば C-continuation は Scm_VMPushCC によって、しか積まれない?
迷走
むーん。なんとなく先週あたりにごちゃごちゃヤッてたナニが全部ダウトな気がしてきました。もう少し throw_continuation() な手続きをきちんと見た方が良さげ。
とりあえず Scm_VMCallCC() 手続きの中で作られる call/cc に渡される引数な手続きオブジェクトは直上で定義されている throw_continuation() 手続きです。ここが今ヒッカカッてる
/* Rewind C stack */ vm->escapeReason = SCM_VM_ESCAPE_CONT; vm->escapeData[0] = ep; vm->escapeData[1] = args; siglongjmp(vm->cstack->jbuf, 1);
なソレがある手続き。最初は
if (vm->cstack != ep->cstack) {
な分岐で C な継続 (C-continuation) と scheme な継続を切り分けてるのだと勘違いしてたんですが、どうやら違う模様。とほほほ。
とりあえず throw_cont_body() 手続き以降をきちっと確認する必要あり。