From 86bb85931d0f28ef9343197e38e02fdc1a6f7f0f Mon Sep 17 00:00:00 2001 From: Alexis King Date: Tue, 16 Oct 2018 18:01:43 -0500 Subject: [PATCH] units: Fix an improper use of syntax instead of quote-syntax --- pkgs/racket-test/tests/units/test-unit.rkt | 35 +++++++++++++++++++ racket/collects/racket/private/unit-utils.rkt | 14 ++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/pkgs/racket-test/tests/units/test-unit.rkt b/pkgs/racket-test/tests/units/test-unit.rkt index faa8e8878b..981e3e772a 100644 --- a/pkgs/racket-test/tests/units/test-unit.rkt +++ b/pkgs/racket-test/tests/units/test-unit.rkt @@ -2241,3 +2241,38 @@ (test-runtime-error exn:fail:contract? "make-foo: broke its own contract" (dynamic-require ''use #f))) + +;; ---------------------------------------- +;; Ellipses in signature bodies should not cause problems due to syntax template misuse + +(parameterize ([current-namespace (make-base-namespace)]) + (eval + '(module m racket/base + (require racket/contract + racket/unit) + + (provide result) + + (define-signature foo^ + [(contracted [foo (-> integer? ... integer?)])]) + + (define-unit foo@ + (import) + (export foo^) + (define (foo . xs) (apply + xs))) + + (define (foo+1@ foo-base@) + (define-values/invoke-unit foo-base@ + (import) + (export (prefix base: foo^))) + (unit + (import) + (export foo^) + (define (foo . xs) (add1 (apply base:foo xs))))) + + (define-values/invoke-unit (foo+1@ foo@) + (import) + (export foo^)) + + (define result (foo 1 2 3)))) + (test 7 (dynamic-require ''m 'result))) diff --git a/racket/collects/racket/private/unit-utils.rkt b/racket/collects/racket/private/unit-utils.rkt index 27e879b67c..80ef7914b5 100644 --- a/racket/collects/racket/private/unit-utils.rkt +++ b/racket/collects/racket/private/unit-utils.rkt @@ -46,13 +46,15 @@ (syntax-case stx (set!) [x (identifier? #'x) - #'#,(add-ctc i (bound-identifier-mapping-get - member-table - i))] + (quote-syntax + #,(add-ctc i (bound-identifier-mapping-get + member-table + i)))] [(x . y) - #'(#,(add-ctc i (bound-identifier-mapping-get - member-table - i)) . y)])))]))) + (quote-syntax + (#,(add-ctc i (bound-identifier-mapping-get + member-table + i)) . y))])))]))) (define-syntax (unit-export stx) (syntax-case stx ()