Pull out the querying of current-contract-region (even though it doesn't
work), as we shouldn't be forming the if clause (here a cond) in the syntax (as it should be evaluated at expansion time). svn: r11642
This commit is contained in:
parent
0d90b5274c
commit
8cbc41042e
|
@ -142,35 +142,36 @@ improve method arity mismatch contract violation error messages?
|
||||||
(define-for-syntax (make-with-contract-transformer contract-id id pos-blame-id)
|
(define-for-syntax (make-with-contract-transformer contract-id id pos-blame-id)
|
||||||
(make-set!-transformer
|
(make-set!-transformer
|
||||||
(lambda (stx)
|
(lambda (stx)
|
||||||
(with-syntax ([neg-blame-id #`(if #,(current-contract-region)
|
(let ([neg-blame-id (cond
|
||||||
#,(current-contract-region)
|
[(current-contract-region) => values]
|
||||||
(module-source-as-symbol #'#,id))]
|
[else #`(module-source-as-symbol #'#,id)])])
|
||||||
[pos-blame-id #`(quote #,(syntax-e pos-blame-id))]
|
(with-syntax ([neg-blame-id neg-blame-id]
|
||||||
[contract-id contract-id]
|
[pos-blame-id #`(quote #,(syntax-e pos-blame-id))]
|
||||||
[id id])
|
[contract-id contract-id]
|
||||||
(syntax-case stx (set!)
|
[id id])
|
||||||
[(set! id arg)
|
(syntax-case stx (set!)
|
||||||
(raise-syntax-error 'with-contract
|
[(set! id arg)
|
||||||
"cannot set! a with-contract variable"
|
(raise-syntax-error 'with-contract
|
||||||
stx
|
"cannot set! a with-contract variable"
|
||||||
(syntax id))]
|
stx
|
||||||
[(f arg ...)
|
(syntax id))]
|
||||||
(syntax/loc stx
|
[(f arg ...)
|
||||||
((-contract contract-id
|
(syntax/loc stx
|
||||||
id
|
((-contract contract-id
|
||||||
pos-blame-id
|
id
|
||||||
neg-blame-id
|
pos-blame-id
|
||||||
(quote-syntax f))
|
neg-blame-id
|
||||||
arg ...))]
|
(quote-syntax f))
|
||||||
[ident
|
arg ...))]
|
||||||
(identifier? (syntax ident))
|
[ident
|
||||||
(syntax/loc stx
|
(identifier? (syntax ident))
|
||||||
(-contract contract-id
|
(syntax/loc stx
|
||||||
id
|
(-contract contract-id
|
||||||
pos-blame-id
|
id
|
||||||
neg-blame-id
|
pos-blame-id
|
||||||
(quote-syntax ident)))])))))
|
neg-blame-id
|
||||||
|
(quote-syntax ident)))]))))))
|
||||||
|
|
||||||
(define-syntax (with-contract stx)
|
(define-syntax (with-contract stx)
|
||||||
(let ([introducer (make-syntax-introducer)])
|
(let ([introducer (make-syntax-introducer)])
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user