From ca237910b3a1f8ffd24f0742e1758ce8186796d5 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 15 Dec 2015 17:06:48 -0700 Subject: [PATCH] fix `make-syntax-delta-introducer` with a #f argument Closes PR 15202 --- pkgs/racket-doc/scribblings/reference/stx-trans.scrbl | 2 ++ pkgs/racket-test-core/tests/racket/stx.rktl | 11 +++++++++++ racket/src/racket/src/syntax.c | 4 +--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl b/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl index e8d6832c95..3eca603e50 100644 --- a/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl +++ b/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl @@ -947,6 +947,8 @@ and different result procedures use distinct scopes. Produces a procedure that behaves like the result of @racket[make-syntax-introducer], but using the @tech{scopes} of @racket[ext-stx] that are not shared with @racket[base-stx]. +A @racket[#f] value for @racket[base-stx] is equivalent to a syntax +object with no @tech{scopes}. This procedure is potentially useful when some @racket[_m-id] has a transformer binding that records some @racket[_orig-id], and a use of diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 4b1e343f6d..13da53dbbf 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -148,6 +148,17 @@ (test #f syntax-original? ((make-syntax-introducer) #'here)) (test #t syntax-original? ((make-syntax-introducer #t) #'here)) +(let* ([a (datum->syntax #f 'a)] + [a1 ((make-syntax-introducer) a)] + [a2 ((make-syntax-introducer) a)]) + (test #f bound-identifier=? a1 a2) + (test #t bound-identifier=? a1 ((make-syntax-delta-introducer a1 a2) a)) + (test #t bound-identifier=? a2 ((make-syntax-delta-introducer a2 a1) a)) + (test #t bound-identifier=? a2 ((make-syntax-delta-introducer a2 #f) a)) + (test #t bound-identifier=? + ((make-syntax-delta-introducer a1 a2) a2) + ((make-syntax-delta-introducer a2 a1) a1))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Test basic expansion and property propagation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/racket/src/racket/src/syntax.c b/racket/src/racket/src/syntax.c index 0ef0a6d685..de2cc3ae1b 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -8006,12 +8006,10 @@ Scheme_Object *scheme_syntax_make_transfer_intro(int argc, Scheme_Object **argv) } else m2 = NULL; - if (!m2) { + if (!m2 && !SCHEME_FALSEP(src)) { src = scheme_stx_lookup_w_nominal(argv[1], phase, 1, NULL, NULL, &m2, NULL, NULL, NULL, NULL, NULL); - if (SCHEME_FALSEP(src)) - m2 = NULL; } if (m2) {