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 };

うーん。とりあえずここで力尽きます。