Strengthen simplification of filters in tc-subst.
original commit: c2e706277bd09e5c328fd598fcc67e179041ec83
This commit is contained in:
parent
4290c9bd2f
commit
d035fd0f3e
|
@ -61,11 +61,13 @@
|
|||
;; This is essentially ψ+|ψ- [o/x] from the paper
|
||||
(define/cond-contract (subst-filter-set fs k o polarity [t Univ])
|
||||
(->* ((or/c FilterSet? NoFilter?) name-ref/c Object? boolean?) (Type/c) FilterSet?)
|
||||
(define extra-filter (-filter t k))
|
||||
(define (add-extra-filter f)
|
||||
(define f* (-and (-filter t k) f))
|
||||
(match f*
|
||||
[(Bot:) f*]
|
||||
[_ f]))
|
||||
(define f* (-and f extra-filter))
|
||||
(cond
|
||||
[(filter-equal? f* extra-filter) -top]
|
||||
[(Bot? f*) -bot]
|
||||
[else f]))
|
||||
(match fs
|
||||
[(FilterSet: f+ f-)
|
||||
(-FS (subst-filter (add-extra-filter f+) k o polarity)
|
||||
|
|
|
@ -573,7 +573,7 @@
|
|||
|
||||
[tc-e/t (let ([x 1]) x) -One]
|
||||
[tc-e (let ([x 1]) (boolean? x)) #:ret (ret -Boolean -false-filter)]
|
||||
[tc-e (boolean? number?) #:ret (ret -Boolean (-FS -bot (-not-filter -Boolean #'number?)))]
|
||||
[tc-e (boolean? number?) #:ret (ret -Boolean -false-filter)]
|
||||
|
||||
[tc-e (let: ([x : (Option Number) #f]) x) (t:Un -Number (-val #f))]
|
||||
[tc-e (let: ([x : Any 12]) (not (not x))) -Boolean]
|
||||
|
@ -917,7 +917,7 @@
|
|||
#:ret (ret -Number)]
|
||||
[tc-err (call-with-values 5
|
||||
(lambda: ([x : Number] [y : Number]) (+ x y)))
|
||||
#:ret (ret -Number -bot-filter)]
|
||||
#:ret (ret -Number)]
|
||||
[tc-err (call-with-values (lambda () (values 2))
|
||||
5)]
|
||||
[tc-err (call-with-values (lambda () (values 2 1))
|
||||
|
@ -1360,7 +1360,7 @@
|
|||
;(tc-e (false? #t) #:ret (ret -Boolean -false-filter))
|
||||
|
||||
|
||||
(tc-e (boolean? true) #:ret (ret -Boolean (-FS (-filter -Boolean #'true) -bot)))
|
||||
(tc-e (boolean? true) #:ret (ret -Boolean -true-filter))
|
||||
(tc-e (boolean? 6) #:ret (ret -Boolean -false-filter))
|
||||
(tc-e (immutable? (cons 3 4)) -Boolean)
|
||||
|
||||
|
@ -1533,12 +1533,12 @@
|
|||
|
||||
(tc-e (namespace-anchor? 3) #:ret (ret -Boolean -false-filter))
|
||||
(tc-e/t (lambda: ((x : Namespace-Anchor)) (namespace-anchor? x))
|
||||
(t:-> -Namespace-Anchor -Boolean : (-FS (-filter -Namespace-Anchor 0) -bot)))
|
||||
(t:-> -Namespace-Anchor -Boolean : -true-filter))
|
||||
|
||||
|
||||
(tc-e (variable-reference? 3) #:ret (ret -Boolean -false-filter))
|
||||
(tc-e/t (lambda: ((x : Variable-Reference)) (variable-reference? x))
|
||||
(t:-> -Variable-Reference -Boolean : (-FS (-filter -Variable-Reference 0) -bot)))
|
||||
(t:-> -Variable-Reference -Boolean : -true-filter))
|
||||
|
||||
(tc-e (system-type 'os) (one-of/c 'unix 'windows 'macosx))
|
||||
(tc-e (system-type 'gc) (one-of/c 'cgc '3m))
|
||||
|
|
Loading…
Reference in New Issue
Block a user