■
姉さんそりゃ無いよ
Pattern variables that occur in subpatterns followed by one or more instances of the identifier `...' are allowed only in subtemplates that are followed by as many instances of `...'.
> as many instances of `...'.
> as many instances of `...'.
> as many instances of `...'.
…いくつついてたか覚えとけと? ただでさえ後付けで binding 変更させられるから 1-pass で書くのが難しい中で?
しかも勘違い。"followed" というのは ")" を挟んで、という話なのね。でもどっちにしてもちょっと matcher の設計をし直さないといけないことには変わりは無い。
あまりに無駄にめんどすぎて
Gauche も Scheme48 も実装してないから正しい動作がよくわからん。
Guile に至っては default で let-syntax 動かないのを見て試す気が失せた。
追記: しかも vector splice も平気でやらないといけないらしい。マジか。
(let-syntax ((macro (syntax-rules () ((_ #(a ...)) (list a ...))))) (macro #(0 1 2))) --> (0 1 2)
continuation frame の alignment 強制
こんなんじゃだめでつか?
typedef struct { /* 要る物適当に */ } cont_frame_guts; typedef char cont_frame[sizeof(cont_frame_guts) + 4]; #define ALIGN_FRAME(_f) (((unsigned long)&(_f)) & -3)
追記: こっそり改訂 orz
"+4" なのは、char を 1byte 単位で配置する処理系で実際の object code に and が挿入されるのを防止するため。
関数 address に関しては、struct { X, Y }; の内 Y は g bit とか other type tag とか置くけど、X は何置いてもいいから生 address 置いておけばおしまい。