31 lines
929 B
Racket
31 lines
929 B
Racket
#lang racket/base
|
|
|
|
;; These utilities facilitate operations on syntax objects.
|
|
;; A syntax object that represents a parenthesized sequence
|
|
;; can contain a mixture of cons cells and syntax objects,
|
|
;; hence the need for `stx-null?', `stx-car', etc.
|
|
|
|
(require racket/private/stx)
|
|
|
|
(provide
|
|
;; from racket/private/stx
|
|
stx-null? stx-pair? stx-list?
|
|
stx-car stx-cdr stx->list
|
|
;; defined here
|
|
stx-map module-or-top-identifier=?)
|
|
|
|
(define (stx-map f . stxls)
|
|
(for ([stxl (in-list stxls)]
|
|
[i (in-naturals)])
|
|
(unless (stx-list? stxl)
|
|
(apply raise-type-error 'stx-map "stx-list" i stxls)))
|
|
(apply map f (map stx->list stxls)))
|
|
|
|
(define (module-or-top-identifier=? a b)
|
|
(or (free-identifier=? a b)
|
|
(and (eq? (syntax-e a) (syntax-e b))
|
|
(free-identifier=? a
|
|
(datum->syntax
|
|
#f
|
|
(syntax-e b))))))
|