From 342198625e7db02fff611b9e4a0c637bd367118e Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 30 Oct 2015 11:28:14 -0400 Subject: [PATCH] syntax-debug-info: handle non-identifiers correctly In particular, fix the handling of binding information when the context includes prefixing on import. Closes PR 15173 --- pkgs/racket-test-core/tests/racket/stx.rktl | 12 ++++++++++++ racket/src/racket/src/syntax.c | 3 +++ 2 files changed, 15 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 838992b882..41232667cc 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -1814,6 +1814,18 @@ (test #t free-identifier=? #'begin (syntax-case a-b-stx () [(b . _) (datum->syntax #'b 'begin)])))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; syntax-debug-info + +(let ([check (lambda (syntax-debug-info) + (test 'x hash-ref (syntax-debug-info #'x) 'name) + (test 'nope hash-ref (syntax-debug-info #'1) 'name 'nope) + (test 'nope hash-ref (syntax-debug-info #'(x y)) 'name 'nope))]) + (check syntax-debug-info) + (parameterize ([current-namespace (make-base-namespace)]) + (eval '(require (prefix-in foo: racket/base))) + (check (lambda (stx) (syntax-debug-info (namespace-syntax-introduce stx)))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check that attacks are thwarted via `syntax-local-get-shadower' ;; or `make-syntax-delta-introducer': diff --git a/racket/src/racket/src/syntax.c b/racket/src/racket/src/syntax.c index 62c5a8b0cb..1320cd5e22 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -4679,6 +4679,9 @@ static Scheme_Object *unmarshal_lookup_adjust(Scheme_Object *sym, Scheme_Object Scheme_Hash_Tree *excepts; Scheme_Object *prefix; + if (!SCHEME_SYMBOLP(sym)) + return scheme_false; + excepts = extract_unmarshal_excepts(SCHEME_VEC_ELS(pes)[3]); prefix = extract_unmarshal_prefix(SCHEME_VEC_ELS(pes)[3]);