File: stx.rkt

package info (click to toggle)
racket 7.9%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 178,684 kB
  • sloc: ansic: 282,112; lisp: 234,887; pascal: 70,954; sh: 27,112; asm: 16,268; makefile: 4,613; cpp: 2,715; ada: 1,681; javascript: 1,244; cs: 879; exp: 499; csh: 422; python: 274; xml: 106; perl: 104
file content (30 lines) | stat: -rw-r--r-- 929 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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))))))