姉さんそりゃ無いよ

本気でつか?

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 で書くのが難しい中で?
しかも
あまりに無駄にめんどすぎて
Gauche も Scheme48 も実装してないから正しい動作がよくわからん。
勘違い。"followed" というのは ")" を挟んで、という話なのね。でもどっちにしてもちょっと matcher の設計をし直さないといけないことには変わりは無い。

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 置いておけばおしまい。