From ac2addeeb67b3e3b3b0a59490d39643f0af82d2c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 7 Mar 2018 08:20:57 -0700 Subject: [PATCH] expander: fix 'origin on `let-syntax`-bound id-macro expansions --- pkgs/racket-test-core/tests/racket/stx.rktl | 11 +++++++++++ racket/src/expander/expand/main.rkt | 4 ++-- racket/src/racket/src/startup.inc | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 101b6956ee..088f2f50a4 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -389,6 +389,17 @@ (tree-map syntax-e) (syntax-property se 'origin)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure `let-syntax` (which involves a rename transformer) +;; attaches the right 'origin + +(test #t + syntax-original? + (let ([stx (expand #'(let-syntax ([m (lambda (stx) #''m)]) + m))]) + (syntax-case stx () + [(_ () (_ () e)) (car (syntax-property #'e 'origin))]))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; #%app, etc. diff --git a/racket/src/expander/expand/main.rkt b/racket/src/expander/expand/main.rkt index 2f09902248..e7c223bab9 100644 --- a/racket/src/expander/expand/main.rkt +++ b/racket/src/expander/expand/main.rkt @@ -340,7 +340,7 @@ (define (apply-transformer t insp-of-t s id ctx binding) (performance-region ['expand '_ 'macro] - + (log-expand ctx 'enter-macro s) (define disarmed-s (syntax-disarm s)) (define intro-scope (new-scope 'macro)) @@ -366,7 +366,7 @@ ;; any expansion result (define post-s (maybe-add-post-expansion-scope result-s ctx)) ;; Track expansion: - (define tracked-s (syntax-track-origin post-s cleaned-s id)) + (define tracked-s (syntax-track-origin post-s cleaned-s (if (identifier? s) s (car (syntax-e s))))) (define rearmed-s (taint-dispatch tracked-s (lambda (t-s) (syntax-rearm t-s s)) (expand-context-phase ctx))) (log-expand ctx 'exit-macro rearmed-s) (values rearmed-s diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index c41be4de59..7e73b4fb7a 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -39169,7 +39169,11 @@ static const char *startup_source = " id_64)))" "(let-values(((result-s_5)(flip-scope transformed-s_0 intro-scope_0)))" "(let-values(((post-s_0)(maybe-add-post-expansion-scope result-s_5 ctx_25)))" -"(let-values(((tracked-s_0)(syntax-track-origin$1 post-s_0 cleaned-s_0 id_64)))" +"(let-values(((tracked-s_0)" +"(syntax-track-origin$1" +" post-s_0" +" cleaned-s_0" +"(if(identifier? s_56) s_56(car(syntax-e$1 s_56))))))" "(let-values(((rearmed-s_0)" "(taint-dispatch" " tracked-s_0"