fix for `syntax-local-value/immediate'

The source locaiton on the second result was mangled.

Closes PR 12477
This commit is contained in:
Matthew Flatt 2013-03-21 14:24:47 -06:00
parent f166934700
commit 3886b7702e
2 changed files with 15 additions and 2 deletions

View File

@ -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)

View File

@ -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);