Handle Integer in contract generation.

Fix provide checking.

svn: r8980
This commit is contained in:
Sam Tobin-Hochstadt 2008-03-15 19:01:39 +00:00
parent 20a98a2f41
commit 7f3c8510de
3 changed files with 10 additions and 4 deletions

View File

@ -7,6 +7,7 @@
(lib "stx.ss" "syntax")
(lib "etc.ss")
(except-in (lib "list.ss") remove)
mzlib/trace
"type-contract.ss"
"signatures.ss"
"tc-structs.ss"
@ -32,13 +33,17 @@
"def-binding.ss"
(lib "plt-match.ss"))
(require (for-template scheme/base
scheme/contract))
(provide remove-provides provide? generate-prov)
(define (provide? form)
(define (provide? form)
(kernel-syntax-case form #f
[(#%provide . rest) form]
[_ #f]))
(define (remove-provides forms)
(filter (lambda (e) (not (provide? e))) (syntax->list forms)))
@ -50,7 +55,7 @@
(def-binding-ty (mem? i vd)))
(define (mk internal-id external-id)
(cond
[(mem? internal-id val-defs)
[(mem? internal-id val-defs)
=>
(lambda (b)
(with-syntax ([id internal-id]

View File

@ -95,7 +95,7 @@
=> (match-lambda
[(tc-result: t)
(register-type (car vars) t)
(list (car vars) t)])]
(list (make-def-binding (car vars) t))])]
[else
(tc-error "Untyped definition : ~a" (map syntax-e vars))]))]
@ -217,7 +217,7 @@
;; resolve all the type aliases, and error if there are cycles
(resolve-type-aliases parse-type)
;; do pass 1, and collect the defintions
(define defs (filter list? (map tc-toplevel/pass1 forms)))
(define defs (apply append (filter list? (map tc-toplevel/pass1 forms))))
;; separate the definitions into structures we'll handle for provides
(define stx-defs (filter def-stx-binding? defs))
(define val-defs (filter def-binding? defs))

View File

@ -74,6 +74,7 @@
[(Input-Port) #'input-port?]
[(Char) #'char?]
[(Namespace) #'namespace?]
[(Integer) #'integer?]
[else (int-err "Base type ~a cannot be converted to contract" sym)])]
[(Union: elems)
(with-syntax