Slight changes to new contract protocol.
svn: r17705
This commit is contained in:
parent
b24b946155
commit
00d79083e3
|
@ -23,9 +23,9 @@ improve method arity mismatch contract violation error messages?
|
||||||
|
|
||||||
(define-syntax (contract stx)
|
(define-syntax (contract stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ c v pos neg loc name)
|
[(_ c v pos neg name loc)
|
||||||
(syntax/loc stx
|
(syntax/loc stx
|
||||||
(apply-contract c v pos neg loc name))]
|
(apply-contract c v pos neg name loc))]
|
||||||
[(_ a-contract to-check pos-blame-e neg-blame-e)
|
[(_ a-contract to-check pos-blame-e neg-blame-e)
|
||||||
#|
|
#|
|
||||||
(quasisyntax/loc stx
|
(quasisyntax/loc stx
|
||||||
|
@ -50,20 +50,22 @@ improve method arity mismatch contract violation error messages?
|
||||||
|#
|
|#
|
||||||
(raise-syntax-error 'contract "upgrade to new calling convention" stx)]))
|
(raise-syntax-error 'contract "upgrade to new calling convention" stx)]))
|
||||||
|
|
||||||
(define (apply-contract c v pos neg loc name)
|
(define (apply-contract c v pos neg name loc)
|
||||||
(let* ([c (coerce-contract 'contract c)])
|
(let* ([c (coerce-contract 'contract c)])
|
||||||
(check-sexp! 'contract "positive blame" pos)
|
(check-sexp! 'contract "positive blame" pos)
|
||||||
(check-sexp! 'contract "negative blame" neg)
|
(check-sexp! 'contract "negative blame" neg)
|
||||||
(check-srcloc! 'contract "source location" loc)
|
|
||||||
(check-sexp! 'contract "value name" name)
|
(check-sexp! 'contract "value name" name)
|
||||||
|
(check-syntax/srcloc! 'contract "source location" loc)
|
||||||
(((contract-projection c)
|
(((contract-projection c)
|
||||||
(make-blame loc name (contract-name c) pos neg #f))
|
(make-blame loc name (contract-name c) pos neg #f))
|
||||||
v)))
|
v)))
|
||||||
|
|
||||||
(define (check-srcloc! f-name v-name v)
|
(define (check-syntax/srcloc! f-name v-name v)
|
||||||
(unless (srcloc? v)
|
(unless (or (syntax? v) (srcloc? v))
|
||||||
(error f-name "expected ~a to be a srcloc; got: ~e" v-name v))
|
(error f-name "expected ~a to be syntax or srcloc; got: ~e" v-name v))
|
||||||
(check-sexp! f-name (format "srcloc-source of ~a") (srcloc-source v)))
|
(check-sexp! f-name
|
||||||
|
(format "source file of ~a")
|
||||||
|
(source-location-source v)))
|
||||||
|
|
||||||
(define (check-sexp! f-name v-name v)
|
(define (check-sexp! f-name v-name v)
|
||||||
(let loop ([seen #hasheq()] [x v])
|
(let loop ([seen #hasheq()] [x v])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user