From 8f20264a8333092cff780dd4755627a28e2c93ac Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 10 Jul 2014 14:11:46 +0100 Subject: [PATCH] fix marshaling of #'(.... . ()) to bytecode --- .../racket-test/tests/racket/stx.rktl | 19 +++++++++++++++++++ racket/src/racket/src/syntax.c | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/stx.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/stx.rktl index c898d546f0..35ddf188ba 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/stx.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/stx.rktl @@ -1819,6 +1819,25 @@ (define-syntax ++ (make-rename-transformer (datum->syntax #'here '+))) (test #f values (displayln-syntax-local-value/immediate ++))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that syntax structure is preserved precisely with +;; #'(a . ()) as opposed to #'(a) + +(let () + (define-values (i o) (make-pipe)) + (write (compile #'#'(a)) o) + (close-output-port o) + (define s (parameterize ([read-accept-compiled #t]) + (read i))) + (test #t null? (cdr (syntax-e (eval s))))) +(let () + (define-values (i o) (make-pipe)) + (write (compile #'#'(a . ())) o) + (close-output-port o) + (define s (parameterize ([read-accept-compiled #t]) + (read i))) + (test #t syntax? (cdr (syntax-e (eval s))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/syntax.c b/racket/src/racket/src/syntax.c index 99a3645c1d..ab0e7cc7c5 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -6611,7 +6611,7 @@ static Scheme_Object *extract_for_common_wrap(Scheme_Object *a, int get_mark, in else return SCHEME_CDR(v); } - } else if (!SCHEME_BOXP(v) && !SCHEME_VECTORP(v) && !SCHEME_HASHTRP(v) && !prefab_p(v)) { + } else if (!SCHEME_NULLP(v) && !SCHEME_BOXP(v) && !SCHEME_VECTORP(v) && !SCHEME_HASHTRP(v) && !prefab_p(v)) { /* It's atomic. */ if (get_mark) return SCHEME_CDR(a);