今日は
ココサブさん担当の setter のレビュー方面取り組み予定。アウトプット出せるかどうかは微妙ですが。
しかし「一般化された set!」って知らなんだ。勉強になります。
# ってか、gauche の事 (scheme の事??) あまり理解できてないのに
# source code reading ってどうなんだ、と自分ツッコミ
Scm_Setter
こんなカンジ
static SCM_DEFINE_STRING_CONST(object_setter__NAME, "object-setter", 13, 13); ScmObj Scm_Setter(ScmObj proc) { if (SCM_PROCEDUREP(proc)) { /* NB: This used to signal an error if no setter procedure is associated to proc; now it returns #f in such case */ return SCM_PROCEDURE(proc)->setter; } else { /* fallback to (setter object-apply) */ return Scm_MakeSubr(object_setter, (void*)proc, 0, 1, SCM_OBJ(&object_setter__NAME)); } }
proc が SCM_PROCEDUREP な場合
return SCM_PROCEDURE(proc)->setter;
してます。見りゃ分かりますが。コメントには setter が無い場合 #f 戻す、ってありますが、その根拠は、というと以下??
#define SCM_PROCEDURE_INIT(obj, req, opt, typ, inf) \ SCM_PROCEDURE(obj)->required = req, \ SCM_PROCEDURE(obj)->optional = opt, \ SCM_PROCEDURE(obj)->type = typ, \ SCM_PROCEDURE(obj)->info = inf, \ SCM_PROCEDURE(obj)->setter = SCM_FALSE, \ SCM_PROCEDURE(obj)->inliner = SCM_FALSE
微妙に気になっているのは
return SCM_PROCEDURE_SETTER(proc);
では何故にないのか、という事。どーでも良いっちゃ良いですが。
proc が SCM_PROCEDUREP でない場合
return Scm_MakeSubr(object_setter, (void*)proc, 0, 1, SCM_OBJ(&object_setter__NAME));
してますな。これが wrap してるナニなのか。って object_setter が直上で定義されてるのを発見。最初は define されてるのか、とナチュラルなソレでした。
static ScmObj object_setter(ScmObj *args, int nargs, void *data) { SCM_ASSERT(nargs == 1); return Scm_VMApply(SCM_OBJ(&Scm_GenericObjectSetter), Scm_Cons(SCM_OBJ(data), args[0])); } static SCM_DEFINE_STRING_CONST(object_setter__NAME, "object-setter", 13, 13);
むむ。こっちはちょっと痺れた脳では微妙。もう少し確認する時間が必要、ってコトで今日は寝ます。疲労困憊。
週末頑張るためのログ、という事で勘弁して下さひ。(何
とほほ
凄いナチュラルな大ボケを書いてますが修正しないでおきます。(とほほ
あら?いいのかな?
もう訳ワカりません。