Gauche > Archives > 2015/08/07

2015/08/07 00:13:08 UTCaharisu
#
pass1後のIFormをS式に戻すコードは書いたことありますね。ソースコードを解析するためにマクロ展開後のS式が必要だったんですが、IFormからS式に戻にはコンパイラが扱う構造体にべったり依存してしまうので、言語自体がその処理をやってくれるのはありがたいですね。
2015/08/07 00:19:14 UTCaharisu
#
当時のコードを読んでみると、koguroさんのglintで実装されているIFormからS式に戻す処理をベースにして作ってました。
#
asm形式になってるやつは、可能性のあるパターンを列挙しておいて、ごり押しで元の形に戻してますね。
2015/08/07 02:36:42 UTCshiro
#
asmは等価なコードに変換すれば良いのですが、グローバル束縛のhygieneは悩みどころです。まあ、単にマクロの展開形を確認するだけなら無視しちゃっても大抵の場合は問題ないんですが。展開後のS式をコードとして使いたいと思うとそうもいかない。
#
あと、named letから変換される$LETノードが、ローカル変数の束縛がpass1で解決されてるのを前提に、通常のletでは不可能な参照方法をするような変形をやってた気がする。
2015/08/07 13:44:44 UTCshiro
#
macroexpand-all足してみた。たいしてテストしてないからエラーでたら教えてくださいな。