From 3886b7702e835203af93190120ba0bf932c3fc38 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 21 Mar 2013 14:24:47 -0600 Subject: [PATCH] fix for `syntax-local-value/immediate' The source locaiton on the second result was mangled. Closes PR 12477 --- collects/tests/racket/stx.rktl | 14 ++++++++++++++ src/racket/src/env.c | 3 +-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/collects/tests/racket/stx.rktl b/collects/tests/racket/stx.rktl index d093f4f669..e71eb19805 100644 --- a/collects/tests/racket/stx.rktl +++ b/collects/tests/racket/stx.rktl @@ -1728,6 +1728,20 @@ (test #\[ syntax-property (quasisyntax [x (unsyntax (syntax y))]) 'paren-shape) (test #\[ syntax-property (quasisyntax [x y]) 'paren-shape) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check srcloc on result of `syntax-local-value/immediate': + +(let () + (define-syntax (displayln-syntax-local-value/immediate stx) + (syntax-case stx () + [(_ id) + (let-values ([(x y) + (syntax-local-value/immediate (datum->syntax #'id + (syntax-e #'id)))]) + #`#,(syntax-source y))])) + (define-syntax ++ (make-rename-transformer (datum->syntax #'here '+))) + (test #f values (displayln-syntax-local-value/immediate ++))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 3e6ce1e99f..50cb84de58 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -2042,8 +2042,7 @@ do_local_exp_time_value(const char *name, int argc, Scheme_Object *argv[], int r v = SCHEME_PTR_VAL(v); if (scheme_is_rename_transformer(v)) { - sym = scheme_rename_transformer_id(v); - sym = scheme_transfer_srcloc(sym, v); + sym = scheme_transfer_srcloc(scheme_rename_transformer_id(v), sym); renamed = 1; menv = NULL; SCHEME_USE_FUEL(1);