gauche-0.9
昨晩掘削したあたりは 0.8 系と変わりは無いのかな。
すごいざっくりな情報でスミマセン。とりあえず Scm_VMRepl で
- repl_loop_cc 手続きが継続に push されて
- repl_main 手続きが実行されつつ、エラー (例外) 発生時には repl_error_handle 手続きが呼び出される
という事のはず。
repl_main 手続きの定義は repl.c の L131 にて以下な定義。
static ScmObj repl_main(ScmObj *args, int nargs, void *data) { ScmObj *closure = (ScmObj*)data; ScmObj prompter = closure[3]; if (SCM_PROCEDUREP(prompter)) { Scm_VMPushCC(repl_prompt_cc, data, 4); return Scm_VMApply0(prompter); } else { Scm_Write(SCM_MAKE_STR("gosh> "), SCM_OBJ(SCM_CUROUT), SCM_WRITE_DISPLAY); Scm_Flush(SCM_CUROUT); return repl_prompt_cc(SCM_UNDEFINED, (void**)data); } }
渡される data は全て #f なはずなので else 句のナニが実行されるはず。repl_error_handle 手続きは以下で。
static ScmObj repl_error_handle(ScmObj *args, int nargs, void *data) { SCM_ASSERT(nargs == 1); Scm_ReportError(args[0]); return SCM_TRUE; }
おそらくこれって
gosh> x *** ERROR: unbound variable: x Stack Trace: _______________________________________ gosh>
なナニではないかと類推。違うかもしれませんが。このエントリは完全に類推ベースです。色々掘削必要です。