Unfortunately, preserving the macro keyword breaks one of Oleg Kiselyov's macros, namely 'ppat' in system/base/pmatch.scm:
--8<---------------cut here---------------start------------->8--- (define-syntax ppat (syntax-rules (_ quote unquote) ((_ v _ kt kf) kt) ((_ v () kt kf) (if (null? v) kt kf)) ((_ v (quote lit) kt kf) (if (equal? v (quote lit)) kt kf)) ((_ v (unquote var) kt kf) (let ((var v)) kt)) ((_ v (x . y) kt kf) (if (pair? v) (let ((vx (car v)) (vy (cdr v))) (ppat vx x (ppat vy y kt kf) kf)) kf)) ((_ v lit kt kf) (if (eq? v (quote lit)) kt kf)))) --8<---------------cut here---------------end--------------->8--- Oleg's macro uses '_' in the keyword position of the pattern, even though '_' is in the literals list. Therefore, it fails to match because 'ppat' does not match that literal. Among other things, this broke our build, which is why Hydra has been failing to build Guile recently. I reverted the change. Mark