Fix open so that it respects contracts.
svn: r14902 original commit: 732e93b9dc5a1e589af6355228ff47313682d0f4
This commit is contained in:
parent
329482216f
commit
1e2e38be43
|
@ -234,17 +234,23 @@
|
|||
|
||||
|
||||
(define-signature-form (open stx)
|
||||
(define (build-sig-elems sig)
|
||||
(map (λ (p c)
|
||||
(if c #`(contracted [#,(car p) #,c]) (car p)))
|
||||
(car sig)
|
||||
(cadddr sig)))
|
||||
(parameterize ([error-syntax stx])
|
||||
(syntax-case stx ()
|
||||
((_ export-spec)
|
||||
(let ([sig (process-spec #'export-spec)])
|
||||
(with-syntax ((((int . ext) ...) (car sig))
|
||||
(with-syntax (((sig-elem ...)
|
||||
(build-sig-elems sig))
|
||||
((renames
|
||||
(((mac-name ...) mac-body) ...)
|
||||
(((val-name ...) val-body) ...))
|
||||
(build-val+macro-defs sig)))
|
||||
(syntax->list
|
||||
#'(int ...
|
||||
#'(sig-elem ...
|
||||
(define-syntaxes . renames)
|
||||
(define-syntaxes (mac-name ...) mac-body) ...
|
||||
(define-values (val-name ...) val-body) ...)))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user