Subject: Re: [bug#54674] [PATCH] services: configuration: Use *unspecified* instead of 'disabled.

From: Maxime Devos <[email-masked]>
Date: Fri, 01 Apr 2022 21:56:58 +0200

Attila Lendvai schreef op vr 01-04-2022 om 21:19 [+0200]:
+    		       (if (unspecified? (syntax->datum def))
     			   #`(#,name #,getter)
     			   #`(#,name #,getter (default #,def))))

I'm not sure this does what you want it to do:

(define-syntax foo
  (lambda (s)
    (syntax-case s ()
      ((_ bar)
       (pk (syntax->datum #'bar) (unspecified? (syntax->datum #'bar)))))))
(foo *unspecified*)
;;; (*unspecified* #f)

The problem is that, from the macro systems POV, *unspecified* is just
a variable reference to the global *unspecified* --- *unspecified*
isn't magic to the reader, the reader just interprets it as a symbol.

Suggestion:

(define-syntax foo2
  (lambda (s)
    (syntax-case s ()
      ((_ bar)
       (pk (syntax->datum #'bar)
           (and (identifier? #'bar)
                (free-identifier=? #'*unspecified* #'bar)))))))
(foo2 *unspecified*)
;;; (*unspecified* #t)

Greetings,
Maxime.