基本的にはマクロが定義されたライブラリ内にあるシンボルはそこで、展開時のライブラリにあるシンボルはそこでという感じで定義時のコンテキストを使って識別子を変換すればいいような気がする。
問題になるのは、シンボル自体はなんの情報も持たないのでそのシンボルが実際にどこで出現したかを確認する術がないことだろう。Sagittariusではマクロ展開時に
syntax
構文の展開が行われるのでどちらの場合も補足している環境的には同じものに見えるのだ。こうなってくると展開時ではなく、
syntax
構文のコンパイル時にシンボルから識別子に変換してしまった方がいいような気がする。そうすれば、少なくとも補足時には識別子になっているので、このような混乱が起きることもない。ちょっとこの方法を試してみるか。とりあえず変更してみた。全テスト動いてるし、件の両IssueもばっちりOKである。シンボルから識別子に変換する部分のコードもかなりすっきりしたしいい感じに修正できた気がする。気づけばこんなに簡単なことだったのか、0.4.1のリリースを一週間遅らせれば間に合わせられたなぁ・・・
No comments:
Post a Comment