diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 3ae21b5f1c..561f48aa2a 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -2044,6 +2044,14 @@ (test #\[ syntax-property (quasisyntax [x (unsyntax (syntax y))]) 'paren-shape) (test #\[ syntax-property (quasisyntax [x y]) 'paren-shape) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that quasisyntax in quasisyntax doesn't infinite loop + +(test #t syntax? (quasisyntax (quote-syntax quasisyntax))) +(test #t syntax? (quasisyntax (quasisyntax . x))) +(test #t syntax? (quasisyntax (list quasisyntax))) +(test #t syntax? (quasisyntax (x . (quasisyntax . x)))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check srcloc on result of `syntax-local-value/immediate': diff --git a/racket/collects/racket/private/qqstx.rkt b/racket/collects/racket/private/qqstx.rkt index 2cab92aeb2..df2229e075 100644 --- a/racket/collects/racket/private/qqstx.rkt +++ b/racket/collects/racket/private/qqstx.rkt @@ -195,8 +195,7 @@ [(pair? l) (if (let ([a (car l)]) (or (and (identifier? a) - (or (free-identifier=? a unsyntax-id) - (free-identifier=? a quasisyntax-id))) + (free-identifier=? a unsyntax-id)) (and (stx-pair? a) (let ([a (stx-car a)]) (and (identifier? a)