
Moved match implementation to new mzlib/private/match directory. Implement keyword arguments to define-match-expander. svn: r3943
45 lines
1.7 KiB
Scheme
45 lines
1.7 KiB
Scheme
(module syntax-utils mzscheme
|
|
;; Useful utilities on syntax objects
|
|
|
|
(provide (all-defined))
|
|
|
|
;;! (function stx-length
|
|
;; (form (syntax-length syntax-obj) -> int)
|
|
;; (contract syntax-object -> int)
|
|
;; (example (syntax-length (syntax iraq war idiocy)) -> 3))
|
|
;; Returns the length of the top-level syntax list.
|
|
(define (stx-length stx) (length (syntax->list stx)))
|
|
|
|
;;! (function stx-?
|
|
;; (form (stx? test val) -> bool)
|
|
;; (contract ((any -> bool) syntax-object) -> bool)
|
|
;; (example (stx-? number? (syntax 4)) -> #t))
|
|
;; Applies predicate test to the syntax object val and returns the resulting
|
|
;; boolean value.
|
|
(define (stx-? test val) (test (syntax-object->datum val)))
|
|
|
|
;;!(function stx-equal?
|
|
;; (form (stx-equal? a b) -> bool)
|
|
;; (contract (syntax-object syntax-object) -> bool)
|
|
;; (example (stx-equal? (syntax 5) (syntax 5)) -> #t))
|
|
;; Check the equality of two syntax objects by after applying
|
|
;; syntax-object->datum to the objects first. Checks equaltiy of
|
|
;; syntax objects after they have had all syntax data stripped away.
|
|
(define (stx-equal? a b)
|
|
(equal? (syntax-object->datum a)
|
|
(syntax-object->datum b)))
|
|
|
|
;;!(function get-exp-var
|
|
;; (form (get-exp-var) -> syntax)
|
|
;; (contract () -> syntax)
|
|
;; (example (get-exp-var) -> (syntax exp754)))
|
|
;; This function just produces unique identifiers for expressions.
|
|
(define (get-exp-var) #`#,(gensym 'exp))
|
|
|
|
|
|
;; syntax-map : (stx -> b) stx-list -> listof[b]
|
|
;; maps a function over a syntax object that represents a list
|
|
(define (syntax-map f stx-l)
|
|
(map f (syntax->list stx-l)))
|
|
|
|
) |