Use contracts for def-binding.

Better error messages from require/typed.

svn: r9204
This commit is contained in:
Sam Tobin-Hochstadt 2008-04-08 17:42:13 +00:00
parent 7b611065b1
commit 909c20553d
2 changed files with 8 additions and 7 deletions

View File

@ -1,10 +1,11 @@
#lang scheme/base
(require scheme/contract)
(provide (struct-out binding)
(struct-out def-binding)
(struct-out def-stx-binding))
(define-struct binding (name) #:transparent)
(define-struct (def-binding binding) (ty) #:transparent)
(define-struct (def-stx-binding binding) () #:transparent)
(define-struct binding (name) #:inspector #f)
(define-struct (def-binding binding) (ty) #:inspector #f)
(define-struct (def-stx-binding binding) () #:inspector #f)
(provide/contract (struct binding ([name identifier?]))
(struct (def-binding binding) ([name identifier?] [ty any/c]))
(struct (def-stx-binding binding) ([name identifier?])))

View File

@ -18,4 +18,4 @@
(syntax-case stx ()
[(require/contract nm cnt lib)
#`(begin (require (only-in lib [nm tmp]))
(define-ignored nm (contract cnt tmp '#,(syntax->datum #'nm) 'never-happen #'#,stx)))]))
(define-ignored nm (contract cnt tmp '#,(syntax->datum #'nm) 'never-happen (quote-syntax nm))))]))