diff --git a/pkgs/racket-pkgs/racket-test/tests/units/test-unit.rkt b/pkgs/racket-pkgs/racket-test/tests/units/test-unit.rkt index 38a85855a0..31b7b88f39 100644 --- a/pkgs/racket-pkgs/racket-test/tests/units/test-unit.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/units/test-unit.rkt @@ -1855,4 +1855,36 @@ ;; ---------------------------------------- +(module check-define-values-invoke-unit-spec racket/base + (require racket/unit) + + (define-signature a^ (foo)) + (define-signature b^ (bar)) + + (define-unit works@ + (import) (export a^) (define foo 'foo)) + (define-values/invoke-unit/infer + (export (rename a^ [qux foo])) + works@) + + (define-unit doesnt@ + (import) (export b^) (define bar 0)) + (define-unit work@ + (import b^) (export a^) (define foo bar)) + ;; No rename on export + (define-values/invoke-unit/infer + (export a^) + (link doesnt@ work@)) + ;; Rename on export + (define-values/invoke-unit/infer + (export (rename a^ [baz foo])) + (link doesnt@ work@)) + + (provide results) + (define results (list foo baz))) + +(test '(0 0) (dynamic-require ''check-define-values-invoke-unit-spec 'results)) + +;; ---------------------------------------- + (displayln "tests passed") diff --git a/racket/collects/racket/private/unit-syntax.rkt b/racket/collects/racket/private/unit-syntax.rkt index a11f5ffc8a..9792737081 100644 --- a/racket/collects/racket/private/unit-syntax.rkt +++ b/racket/collects/racket/private/unit-syntax.rkt @@ -56,8 +56,8 @@ (define check-tagged-id (check-tagged check-id)) -;; check-spec-syntax : syntax-object boolean (syntax-object -> boolean) -> -;; ensures that s matches spec. +;; check-spec-syntax : syntax-object boolean (syntax-object -> boolean) -> prim-spec? +;; ensures that s matches spec, returns the core prim-spec (which is usually an identifier) ;; tag-spec ::= spec ;; | (tag symbol spec) ;; spec ::= prim-spec @@ -69,7 +69,9 @@ ((check-tagged (λ (s) (check-spec-syntax s import? prim-spec?))) s)) (define (check-spec-syntax s import? prim-spec?) - (unless (prim-spec? s) + (cond + [(prim-spec? s) s] + [else (let ((ie (if import? 'import 'export))) (unless (stx-pair? s) (raise-stx-err (format "bad ~a spec" ie) s)) @@ -124,7 +126,7 @@ (syntax->list #'(clause ...))) (check-spec-syntax #'sub-s import? prim-spec?))) ((k . x) - (raise-stx-err (format "bad ~a-spec keyword" ie) #'k)))))) + (raise-stx-err (format "bad ~a-spec keyword" ie) #'k))))])) ;; check-unit-syntax : syntax-object -> syntax-object ;; ensures that stx matches ((import i ...) (export e ...) b ...) diff --git a/racket/collects/racket/unit.rkt b/racket/collects/racket/unit.rkt index 98b84b63b6..b89a6a5092 100644 --- a/racket/collects/racket/unit.rkt +++ b/racket/collects/racket/unit.rkt @@ -2101,7 +2101,7 @@ [exports (map (lambda (e) - (define tid (check-tagged-id e)) + (define tid (check-tagged-spec-syntax e #f identifier?)) (define lookup (bound-identifier-mapping-get lnk-table (cdr tid)