Tag the contracts so we know what are truly contracts and which are just

placeholder #fs.

svn: r13048

original commit: af69c0bbeccf2fab5e11b104cd8bb3a686f343f9
This commit is contained in:
Stevie Strickland 2009-01-09 19:50:28 +00:00
parent ea41bc867d
commit 4d8f6fdeb0

View File

@ -514,7 +514,12 @@
[((eloc ...) ...)
(map (lambda (x) (generate-temporaries (car x))) export-sigs)]
[((ectc ...) ...)
(map cadddr export-sigs)]
(map (λ (sig)
(map (λ (ctc)
(if ctc
(cons 'contract ctc)
#f))
(cadddr sig))) export-sigs)]
[((import-key import-super-keys ...) ...)
(map tagged-info->keys import-tagged-infos)]
[((export-key ...) ...)
@ -673,10 +678,12 @@
(when (var-info-syntax? v)
(raise-stx-err "cannot export syntax from a unit" name))
(set-var-info-exported?! v loc)
(set-var-info-add-ctc! v (lambda (e)
#`(if #,ctc
(contract #,ctc #,e '#,unit-name 'cant-happen #,(id->contract-src-info var))
#,e)))))
(when (pair? (syntax-e ctc))
(set-var-info-add-ctc!
v
(λ (e)
#`(contract #,(cdr (syntax-e ctc)) #,e '#,unit-name
'cant-happen #,(id->contract-src-info var)))))))
(syntax->list (localify #'evars def-ctx))
(syntax->list #'elocs)
(syntax->list #'ext-evars)