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

placeholder #fs.

svn: r13048
This commit is contained in:
Stevie Strickland 2009-01-09 19:50:28 +00:00
parent bae2c7b5e1
commit af69c0bbec

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)