0.9 な Reading が開始されている模様
とりあえず main.c の 516 行の
} else {
Scm_Repl(SCM_FALSE, SCM_FALSE, SCM_FALSE, SCM_FALSE);
}から確認開始。knishii さんが掘ってるナニも確認しつつ。
ええと、Scm_Repl() 手続きの定義が以下。
# repl.c の 192 行
void Scm_Repl(ScmObj reader, ScmObj evaluator, ScmObj printer,
ScmObj prompter)
{
Scm_ApplyRec(SCM_OBJ(&repl_STUB),
SCM_LIST4(reader, evaluator, printer, prompter));
}repl_STUB の定義は以下と思われます。
# repl.c の 190 行
static SCM_DEFINE_SUBR(repl_STUB, 0, 1, SCM_OBJ(&repl_NAME), repl_proc, NULL, NULL);
多分、SCM_DEFINE_SUBR マクロは地雷なんだろうな、と思いつつ掘り始めてみると以下。
#define SCM__DEFINE_SUBR_INT(cvar, req, opt, inf, flags, func, inliner, data) \
ScmSubr cvar = { \
SCM__PROCEDURE_INITIALIZER(SCM_CLASS_STATIC_TAG(Scm_ProcedureClass),\
req, opt, SCM_PROC_SUBR, inf, inliner), \
flags, (func), (data) \
}
#define SCM_DEFINE_SUBR(cvar, req, opt, inf, func, inliner, data) \
SCM__DEFINE_SUBR_INT(cvar, req, opt, inf, 0, func, inliner, data)gauche.h の 1321 行あたり。手動展開してみるにはリキが微妙。てか、このあたりは 0.8.11 って思ったら (ry
ええと、SCM__PROCEDURE_INITIALIZER マクロの定義が以下で
#define SCM__PROCEDURE_INITIALIZER(klass, req, opt, typ, inf, inl) \
{ { klass }, (req), (opt), (typ), FALSE, FALSE, (inf), SCM_FALSE, (inl) }あと、ScmSubr 型は ScmSubrRec 構造体で typedef されてて構造体の定義が gauche.h で以下。
/* Subr - C defined procedure */
struct ScmSubrRec {
ScmProcedure common;
int flags;
ScmSubrProc *func;
void *data;
};ええと、ScmProcedure 型は ScmProcedureRec 構造体で typedef されてるんですが、定義が以下ッスか。
struct ScmProcedureRec {
SCM_INSTANCE_HEADER;
unsigned int required : 16; /* # of required args */
unsigned int optional : 8; /* >=1 if it takes opt args. see below.*/
unsigned int type : 3; /* ScmProcedureType */
unsigned int locked : 1; /* setter locked? */
unsigned int currying : 1; /* autocurrying */
ScmObj info; /* source code info */
ScmObj setter; /* setter, if exists. */
ScmObj inliner; /* inliner information. see below. */
};うーん。このあたり色々きっちり確認必要。