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

Reply via email to