racket/collects/scheme/stxparam.ss
2008-11-26 21:31:58 +00:00

35 lines
1.2 KiB
Scheme

(module stxparam '#%kernel
(#%require "private/more-scheme.ss"
"private/letstx-scheme.ss"
"private/define.ss"
"private/stxparam.ss"
(for-syntax '#%kernel
"stxparam-exptime.ss"
"private/stx.ss" "private/stxcase-scheme.ss"
"private/small-scheme.ss"
"private/stxloc.ss" "private/stxparamkey.ss"))
(#%provide define-syntax-parameter
syntax-parameterize
(for-syntax syntax-parameter-value
make-parameter-rename-transformer))
(define-syntax (define-syntax-parameter stx)
(syntax-case stx ()
[(_ id init-val)
(with-syntax ([gen-id (car (generate-temporaries (list #'id)))])
#'(begin
(define-syntax gen-id (convert-renamer init-val))
(define-syntax id
(let ([gen-id ((syntax-local-certifier) #'gen-id)])
(make-set!-transformer
(make-syntax-parameter
(lambda (stx)
(let ([v (syntax-parameter-target-value gen-id)])
(apply-transformer v stx #'set!)))
gen-id))))))]))
(define-syntax (syntax-parameterize stx)
(do-syntax-parameterize stx #'let-syntaxes)))