Add instrumentation for box contracts.
This commit is contained in:
parent
379a3dd110
commit
9b7724167a
|
@ -210,4 +210,14 @@
|
|||
'(let ()
|
||||
((contract (case-> (-> neg-blame? any/c))
|
||||
(λ (x) x) 'pos 'neg)
|
||||
1))))
|
||||
1)))
|
||||
|
||||
(test/spec-passed
|
||||
'provide/contract23
|
||||
'(unbox (contract (box/c neg-blame?) (box 1) 'pos 'neg)))
|
||||
|
||||
(test/spec-passed
|
||||
'provide/contract24
|
||||
'(set-box! (contract (box/c neg-blame?) (box 1) 'pos 'neg) 2))
|
||||
|
||||
)
|
||||
|
|
|
@ -141,6 +141,7 @@
|
|||
(define pos-elem-r-proj (r-vfp box-blame))
|
||||
(define neg-elem-w-proj (w-vfp (blame-swap box-blame)))
|
||||
(λ (val neg-party)
|
||||
(define blame+neg-party (cons blame neg-party))
|
||||
(cond
|
||||
[(check-box/c-np ctc val blame)
|
||||
=>
|
||||
|
@ -150,8 +151,14 @@
|
|||
(box-immutable (pos-elem-r-proj (unbox val) neg-party))
|
||||
(chaperone/impersonate-box
|
||||
val
|
||||
(λ (b v) (pos-elem-r-proj v neg-party))
|
||||
(λ (b v) (neg-elem-w-proj v neg-party))
|
||||
(λ (b v)
|
||||
(with-contract-continuation-mark
|
||||
blame+neg-party
|
||||
(pos-elem-r-proj v neg-party)))
|
||||
(λ (b v)
|
||||
(with-contract-continuation-mark
|
||||
blame+neg-party
|
||||
(neg-elem-w-proj v neg-party)))
|
||||
impersonator-prop:contracted ctc
|
||||
impersonator-prop:blame (blame-add-missing-party blame neg-party)))])))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user