Reading Gauche なメモ
昨晩のメモを見つつリハビリ。
id:YasuyukiMiuraさんから星を頂いている。ほぼビンゴな星である事を祈りつつ再確認。
SCM_MODULEP
概要の下書きはなんとなく微妙。Gauche リファレンスでは_モジュールクラス_という書き方されてるから以下で良いかな。
obj がモジュールクラスのオブジェクトであれば真を戻す。
あるいは SCM_PROCEDUREP なソレを踏襲すると、って中身が微妙に違うな。SCM_XTYPEP の記述が
objがクラス klass のオブジェクトであれば真
ってなってるので上記の書き方でビンゴという事にします。次の SCM_CLASS_MODULE マクロはあの書き方で OK とゆー事で。最後のナニ (Scm_ModuleClass) もそのまま投入します。
投入後
時間が許す限り、ソースを掘りつつ Scm_FindBinding 以下のナニを確認してみる。以下箇条書きでポイント列挙
- stay_in_module は引数の flags と 0x1 (SCM_BINDING_STAY_IN_MODULE) とのビット積が代入。なので 1 か 0 になるはず。
- ちなみに GLOBAL_REF マクロからの呼び出しなソレは以下
gloc = Scm_FindBinding(SCM_IDENTIFIER(v)->module, \ SCM_IDENTIFIER(v)->name, \ 0); \
- flags はゼロ
- GLOBAL_REF マクロ内では引数 v が Global Location なオブジェクトでない場合には Identifier でキメ打ちな模様。
- Identifier って何だ、とゆー事で google 先生に確認取ったら ココ にて shiro さんがコメント入れられている
identifierはマクロ展開に使われるものです。ユーザにとってはあんまり必要ありません。identifierの名称は、hygienic macroの文献からとっています。
- むむむ。謎が深まるばかり。
- とりあえず、ざっくりベースで hit したらソレを戻すし駄目なら NULL が戻る
- modules って何だ
/* Global module table */ static struct { ScmObj anon_name; /* Name used for anonymous modules. Symbol '#', set by init */ ScmHashTable *table; /* Maps name -> module. */ ScmInternalMutex mutex; /* Lock for table. Only register_module and lookup_module may hold the lock. */ } modules = { SCM_UNBOUND, NULL };
うーん。とりあえずここで力尽きます。