From bbbdee28533c9b601ecd136cb14613e7f03bdf4a Mon Sep 17 00:00:00 2001 From: Alexis King Date: Fri, 11 May 2018 16:47:50 -0500 Subject: [PATCH] Adjust local-require to be more deliberate about syntax-local-introduce MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This ensures macro-introduction scopes don’t unintentionally end up on lifted pieces of syntax, which causes problems for Check Syntax, since it affects the syntax-original?-ness of the require spec. --- racket/collects/racket/private/reqprov.rkt | 41 +++++++++++----------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/racket/collects/racket/private/reqprov.rkt b/racket/collects/racket/private/reqprov.rkt index 9244b5f5a4..0aba11f49b 100644 --- a/racket/collects/racket/private/reqprov.rkt +++ b/racket/collects/racket/private/reqprov.rkt @@ -1182,7 +1182,7 @@ (import-mode i) (list #'rename (import-src-mod-path i) - (syntax-local-introduce (import-local-id i)) + (import-local-id i) (import-src-sym i)))) (import-orig-stx i))) @@ -1192,25 +1192,26 @@ (define-syntax (local-require stx) (when (eq? 'expression (syntax-local-context)) (raise-syntax-error #f "not allowed in an expression context" stx)) - (syntax-case stx [] - [(_ spec ...) - (let*-values ([(imports sources) - (expand-import - (datum->syntax - stx - (list* #'only-meta-in 0 (syntax->list #'(spec ...))) - stx))] - [(names) (map import-local-id imports)] - [(reqd-names) - (let ([ctx (syntax-local-get-shadower (datum->syntax #f (gensym)))]) - (map (lambda (n) (datum->syntax ctx (syntax-e n) n)) names))] - [(renamed-imports) (map rename-import imports reqd-names)] - [(raw-specs) (map import->raw-require-spec renamed-imports)] - [(lifts) (map syntax-local-lift-require raw-specs reqd-names)]) - (with-syntax ([(name ...) names] - [(lifted ...) lifts]) - (syntax/loc stx (define-syntaxes (name ...) - (values (make-rename-transformer (quote-syntax lifted)) ...)))))])) + (let ([stx (syntax-local-introduce stx)]) + (syntax-case stx [] + [(_ spec ...) + (let*-values ([(imports sources) + (expand-import + (datum->syntax + stx + (list* #'only-meta-in 0 (syntax->list #'(spec ...))) + stx))] + [(names) (map import-local-id imports)] + [(reqd-names) + (let ([ctx (syntax-local-get-shadower (datum->syntax #f (gensym)))]) + (map (lambda (n) (datum->syntax ctx (syntax-e n) n)) names))] + [(renamed-imports) (map rename-import imports reqd-names)] + [(raw-specs) (map import->raw-require-spec renamed-imports)] + [(lifts) (map syntax-local-lift-require raw-specs reqd-names)]) + (with-syntax ([(name ...) (map syntax-local-introduce names)] + [(lifted ...) (map syntax-local-introduce lifts)]) + (syntax/loc stx (define-syntaxes (name ...) + (values (make-rename-transformer (quote-syntax lifted)) ...)))))]))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; )