Add instrumentation to set/c.
This commit is contained in:
parent
a48b559324
commit
74c423bb24
|
@ -521,4 +521,39 @@
|
||||||
(eval '(async-channel-put c 3))
|
(eval '(async-channel-put c 3))
|
||||||
(eval '(async-channel-get c))))
|
(eval '(async-channel-get c))))
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'contract-marks57
|
||||||
|
'(let ()
|
||||||
|
(eval '(require racket/generic))
|
||||||
|
(eval '(define-generics fooable (foo fooable)))
|
||||||
|
(eval '(struct s () #:methods gen:fooable [(define (foo x) x)]))
|
||||||
|
(eval '(foo (contract (generic-instance/c gen:fooable [foo (-> pos-blame? neg-blame?)])
|
||||||
|
(s) 'pos 'neg)))))
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'contract-marks58
|
||||||
|
'(let ()
|
||||||
|
(eval '(require racket/set))
|
||||||
|
(eval '(define s (contract (set/c pos-blame?) (set 1 2 3) 'pos 'neg)))
|
||||||
|
(eval '(set-add s 3))
|
||||||
|
(eval '(set-member? s 3))))
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'contract-marks59
|
||||||
|
'(let ()
|
||||||
|
(eval '(require racket/set))
|
||||||
|
(eval '(define s (contract (set/c pos-blame? #:lazy? #t #:kind 'mutable)
|
||||||
|
(mutable-set 1 2 3) 'pos 'neg)))
|
||||||
|
(eval '(set-add! s 3))
|
||||||
|
(eval '(set-member? s 3))))
|
||||||
|
|
||||||
|
(test/spec-passed
|
||||||
|
'contract-marks60
|
||||||
|
'(let ()
|
||||||
|
(eval '(require racket/set))
|
||||||
|
(eval '(define s (contract (set/c pos-blame? #:kind 'dont-care)
|
||||||
|
(list 1 2 3) 'pos 'neg)))
|
||||||
|
(eval '(set-add s 3))
|
||||||
|
(eval '(set-member? s 3))))
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -198,6 +198,7 @@
|
||||||
(λ (val neg-party)
|
(λ (val neg-party)
|
||||||
(set-contract-check cmp kind blame neg-party val)
|
(set-contract-check cmp kind blame neg-party val)
|
||||||
(define (pos-interpose val ele) (late-neg-pos-proj ele neg-party))
|
(define (pos-interpose val ele) (late-neg-pos-proj ele neg-party))
|
||||||
|
(define blame+neg-party (cons blame neg-party))
|
||||||
(cond
|
(cond
|
||||||
[(set? val)
|
[(set? val)
|
||||||
(chaperone-hash-set
|
(chaperone-hash-set
|
||||||
|
@ -205,31 +206,44 @@
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) (late-neg-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-pos-proj ele neg-party)))
|
||||||
(λ (val) (void))
|
(λ (val) (void))
|
||||||
(λ (val ele) (late-neg-equal-key-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-equal-key-pos-proj ele neg-party)))
|
||||||
impersonator-prop:contracted ctc
|
impersonator-prop:contracted ctc
|
||||||
impersonator-prop:blame (cons blame neg-party))]
|
impersonator-prop:blame (cons blame neg-party))]
|
||||||
[else
|
[else
|
||||||
(chaperone-hash-set
|
(chaperone-hash-set
|
||||||
val
|
val
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) (late-neg-neg-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-neg-proj ele neg-party)))
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) (late-neg-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-pos-proj ele neg-party)))
|
||||||
(λ (val) (void))
|
(λ (val) (void))
|
||||||
(λ (val ele) (late-neg-equal-key-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-equal-key-pos-proj ele neg-party)))
|
||||||
impersonator-prop:contracted ctc
|
impersonator-prop:contracted ctc
|
||||||
impersonator-prop:blame (cons blame neg-party))]))]
|
impersonator-prop:blame (cons blame neg-party))]))]
|
||||||
[else
|
[else
|
||||||
(λ (val neg-party)
|
(λ (val neg-party)
|
||||||
|
(define blame+neg-party (cons blame neg-party))
|
||||||
(set-contract-check cmp kind blame neg-party val)
|
(set-contract-check cmp kind blame neg-party val)
|
||||||
(cond
|
(cond
|
||||||
[(set? val)
|
[(set? val)
|
||||||
(chaperone-hash-set
|
(chaperone-hash-set
|
||||||
(for/fold ([s (set-clear val)])
|
(for/fold ([s (set-clear val)])
|
||||||
([e (in-set val)])
|
([e (in-set val)])
|
||||||
(set-add s (late-neg-pos-proj e neg-party)))
|
(set-add s (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-pos-proj e neg-party))))
|
||||||
#f #f #f
|
#f #f #f
|
||||||
impersonator-prop:contracted ctc
|
impersonator-prop:contracted ctc
|
||||||
impersonator-prop:blame (cons blame neg-party))]
|
impersonator-prop:blame (cons blame neg-party))]
|
||||||
|
@ -240,11 +254,17 @@
|
||||||
(chaperone-hash-set
|
(chaperone-hash-set
|
||||||
val
|
val
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) (late-neg-neg-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-neg-proj ele neg-party)))
|
||||||
(λ (val ele) ele)
|
(λ (val ele) ele)
|
||||||
(λ (val ele) (late-neg-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-pos-proj ele neg-party)))
|
||||||
(λ (val) (void))
|
(λ (val) (void))
|
||||||
(λ (val ele) (late-neg-equal-key-pos-proj ele neg-party))
|
(λ (val ele) (with-contract-continuation-mark
|
||||||
|
blame+neg-party
|
||||||
|
(late-neg-equal-key-pos-proj ele neg-party)))
|
||||||
impersonator-prop:contracted ctc
|
impersonator-prop:contracted ctc
|
||||||
impersonator-prop:blame (cons blame neg-party))]))])))
|
impersonator-prop:blame (cons blame neg-party))]))])))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user