;; Some utility functions for use in syntax-case quasiquoting. (module tx-utils mzscheme (require (lib "stx.ss" "syntax")) (provide (all-defined) (all-from (lib "stx.ss" "syntax"))) (define (reverse-stx stx) #`(#,@(reverse (syntax->list stx)))) (define (lexical-binding? stx) (eq? 'lexical (identifier-binding stx))) (define (module-binding? stx) (list? (identifier-binding stx))) (define ->syntax datum->syntax-object) (define ->datum syntax-object->datum) ;; Prefix a name, but keep syntax information intact. (define (prefix . names) (->syntax (car (reverse names)) ;; use original name info (string->symbol (apply string-append (map (lambda (x) (format "~a" (->datum x))) names))))) (define (stx-length s) (length (->datum s))) )