racket/unit: fix signature handling of define-values/invoke-unit/infer
Closes PR 14453
This commit is contained in:
parent
cd9e46edc2
commit
7137c8d6a6
|
@ -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")
|
||||
|
|
|
@ -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 ...)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user