Clean up stxparam interface
This commit is contained in:
parent
9498bdd80f
commit
3cb100ba17
|
@ -20,18 +20,7 @@
|
|||
"not an identifier"
|
||||
stx
|
||||
id))
|
||||
(let*-values
|
||||
;; 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)])
|
||||
(let ([sp (syntax-parameter-local-value id)])
|
||||
(unless (syntax-parameter? sp)
|
||||
(raise-syntax-error
|
||||
#f
|
||||
|
|
|
@ -36,6 +36,21 @@
|
|||
(define (syntax-parameter-target sp)
|
||||
(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)
|
||||
(syntax-local-value (syntax-local-get-shadower target #t)
|
||||
(lambda ()
|
||||
|
@ -115,6 +130,7 @@
|
|||
make-syntax-parameter
|
||||
rename-transformer-parameter?
|
||||
make-rename-transformer-parameter
|
||||
syntax-parameter-local-value
|
||||
syntax-parameter-target
|
||||
syntax-parameter-target-value
|
||||
syntax-parameter-target-parameter))
|
||||
|
|
Loading…
Reference in New Issue
Block a user