Gauche > Archives > 2020/03/20

2020/03/20 17:27:59 UTCkaki
#
gosh> (match '() ((or (x) (and x (not 42))) 'foo))
foo
gosh> (match '() ((or (and x (not 42)) (x)) 'foo))
*** ERROR: pair required, but got #f
    While compiling: (match '() ((or (and x (not 42)) (x)) 'foo))
#
orパターンの順番を変えただけでコンパイル時エラーになってしまいました。ところでこれマクロ展開時のエラーだと思ったんですが、マクロ展開時のスタックトレース的なものは得られないんでしょうか。
2020/03/20 18:51:15 UTCshiro
#
マクロ展開のトレースはtrace-macroがあります。 http://practical-scheme.net/gauche/man?p=trace-macro でも今回のケースではトレース出ませんね。なんでだろう
#
ああそうか、最初の展開で失敗したらtrace-macroのトレース表示までいかないのか。
2020/03/20 18:59:18 UTCshiro
#
matchの展開時のスタックトレースが出ないのは、util.matchがプリコンパイルされてるからだな。改めてlibsrc/util/matchをロードすれば出る。やっぱりプリコンパイルドなコードにもソース情報アタッチしないとつらいかな
#
ただ今回の場合、matchの展開ルーチンは継続渡しで書いてあるからスタックトレース見てもいまいち