same-id-pattern.rkt (428B)
1 #lang racket 2 (provide ~same-free-id) 3 4 (require syntax/parse) 5 6 (define-splicing-syntax-class (same-free-id f) 7 #:description (format "the identifier ~a" 8 (syntax-e f)) 9 (pattern x #:when (and (identifier? #'x) (free-identifier=? #'x f)))) 10 11 (define-syntax ~same-free-id 12 (pattern-expander 13 (λ (stx) 14 (syntax-case stx () 15 [(_ pvar) (identifier? #'pvar) #'{~var || (same-free-id #'pvar)}]))))