とほほ

ワケワカってなくって色々ヤッてるんですが、あまりの微妙さに嫌になる瞬間があるなぁ。Gauche 0.8.6 のコンパイル過程を見るにある記述に沿って試してみた。
手元にあるのは 0.8.11 でここの compile.scm に記述の通り手を入れて gosh に吸わせてみたら以下な出力。

$ gosh -I . -l compile.test.scm -E 'select-module gauche.internal.test'
*** ERROR: Compile Error: wrong number of arguments for #<subr global-call-type> (required 1, got 2)
"./compile.test.scm":1697:(define (pass1/define-macro form ofo ...

Stack Trace:
_______________________________________
  0  (global-call-type id cenv)
        At line 1388 of "./compile.test.scm"
  1  (pass1 expr cenv)
        [unknown location]

むむ。global-call-type って何だろ、と言いつつ grep してみる。

$ grep global-call-type *
バイナリー・ファイルGTAGSは一致しました
compile.c:      SCM_STRING_CONST_INITIALIZER("global-call-type", 16, 16),
compile.c:    SCM_WORD(SCM_UNDEFINED) /* #<identifier |#|#global-call-type> */,
compile.scm:    (receive (gval type) (global-call-type id cenv)
compile.test.scm:    (receive (gval type) (global-call-type id cenv)
compile.test.scm~:    (receive (gval type) (global-call-type id cenv)
intlib.c:      SCM_STRING_CONST_INITIALIZER("global-call-type", 16, 16),
intlib.c:  SCM_ENTER_SUBR("global-call-type");
intlib.c:  SCM_DEFINE(module, "global-call-type", SCM_OBJ(&intlib_global_call_type__STUB));
intlib.stub:;;   Although global-call-type is in critical path, my benchmark showed
intlib.stub:(define-cproc global-call-type (id cenv)

どうやって intlib.stub からシンボル解決してるかも謎。あまりに訳わからんので、0.8.6 を落としてみて同じように盛り込んでみたら以下

$ gosh -I . -l compile.test.scm -E 'select-module gauche.internal.test'
gosh>

あらら。global-call-type で grep してみたら以下 (0.8.6

$ grep global-call-type *
compile.scm:    (receive (gval type) (global-call-type id)
compile.test.scm:    (receive (gval type) (global-call-type id)
compile.test.scm~:    (receive (gval type) (global-call-type id)
intlib.stub:(define-cproc global-call-type (id)
$

たしかに引数の数が違うな。それにしても intlib.stub って何だろ。

迷走気味

これは kernel 云々も同じなんですが。
とりあえず上記に控えた意味が分かってないのも微妙だし、色々な部分を端折っていきなり中身を見てるのも駄目な気がしています。これは ReadingGauche も同様な気がするなぁ。