diff --git a/racket/collects/racket/private/stxparam.rkt b/racket/collects/racket/private/stxparam.rkt index 6fed01c96e..93a943b9d2 100644 --- a/racket/collects/racket/private/stxparam.rkt +++ b/racket/collects/racket/private/stxparam.rkt @@ -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 diff --git a/racket/collects/racket/private/stxparamkey.rkt b/racket/collects/racket/private/stxparamkey.rkt index 8a597dfbfe..bbd82e118c 100644 --- a/racket/collects/racket/private/stxparamkey.rkt +++ b/racket/collects/racket/private/stxparamkey.rkt @@ -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))