Gauche > Archives > 2017/05/02

2017/05/02 01:56:45 UTCshiro
#
r7rs libraryで定義したマクロが内部defineを挿入した際にそれが内部defineとして認識されずsyntax-errorになる件、てっきり衛生マクロ展開のどっかでしくじってるんだと思ってたがよく調べたらむしろ衛生マクロ展開がちゃんとできてたからこそのバグであった。 https://github.com/shirok/Gauche/issues/221
#
Gaucheモジュールで同様のマクロを定義した場合には症状が出ないのでdefineが定義されてるモジュールの違いかと(r7rs#defineとgauche#defineはbindingが異なる)勘違いしてそっちを追いかけるのに無駄な時間を使った。
#
実はdefine-libraryの定義を手抜きでやってて、スコープ内でbeginを再定義してたせいで、define-library内で定義した衛生マクロが挿入するbeginが本来のbeginと異なる束縛を持っていた (free-identifier=?にならない) せいであった。束縛された値自体は同じ#<syntax begin>なので普通にコンパイルするぶんには通るんだけど、内部defineをスキャンする際にはfree-identifier=?相当の同一性判定をするので、begin内の内部defineがspliceされなかった、というオチ。