Clean up stxparam interface

This commit is contained in:
Jay McCarthy 2016-01-14 17:15:22 -05:00
parent 9498bdd80f
commit 3cb100ba17
2 changed files with 17 additions and 12 deletions

View File

@ -20,18 +20,7 @@
"not an identifier" "not an identifier"
stx stx
id)) id))
(let*-values (let ([sp (syntax-parameter-local-value id)])
;; If it is a rename-transformer-parameter, then
;; we need to get the parameter and not what it
;; points to, otherwise, we can keep going.
([(rt* rt-target)
(syntax-local-value/immediate id (lambda () #f))]
[(rt) (if (syntax-parameter? rt*)
rt*
(or rt-target rt*))]
[(sp) (if (set!-transformer? rt)
(set!-transformer-procedure rt)
rt)])
(unless (syntax-parameter? sp) (unless (syntax-parameter? sp)
(raise-syntax-error (raise-syntax-error
#f #f

View File

@ -36,6 +36,21 @@
(define (syntax-parameter-target sp) (define (syntax-parameter-target sp)
(syntax-parameter-ref sp 1)) (syntax-parameter-ref sp 1))
;; If it is a rename-transformer-parameter, then we need to get the
;; parameter and not what it points to, otherwise, we can keep
;; going.
(define (syntax-parameter-local-value id)
(let*-values
([(rt* rt-target)
(syntax-local-value/immediate id (lambda () #f))]
[(rt) (if (syntax-parameter? rt*)
rt*
(or rt-target rt*))]
[(sp) (if (set!-transformer? rt)
(set!-transformer-procedure rt)
rt)])
sp))
(define (target-value target) (define (target-value target)
(syntax-local-value (syntax-local-get-shadower target #t) (syntax-local-value (syntax-local-get-shadower target #t)
(lambda () (lambda ()
@ -115,6 +130,7 @@
make-syntax-parameter make-syntax-parameter
rename-transformer-parameter? rename-transformer-parameter?
make-rename-transformer-parameter make-rename-transformer-parameter
syntax-parameter-local-value
syntax-parameter-target syntax-parameter-target
syntax-parameter-target-value syntax-parameter-target-value
syntax-parameter-target-parameter)) syntax-parameter-target-parameter))