diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/object.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/object.rkt index 85bdfbc0..b6ec3f14 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/object.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/object.rkt @@ -45,6 +45,11 @@ (match v [(class-combinator args opaque absent-fields absent-methods) (class-combinator (member-seq-sc-map f args) opaque absent-fields absent-methods)])) + (define (sc-traverse v f) + (match v + [(class-combinator args opaque absent-fields absent-methods) + (member-seq-sc-map f args) + (void)])) (define (sc->contract v f) (class/sc->contract v f)) (define (sc->constraints v f) @@ -57,6 +62,7 @@ (filter-map member-spec-sc vals)])) (struct member-seq (vals) + #:transparent #:property prop:sequence member-seq->list) (define (member-seq-sc-map f seq) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/static-contract-optimizer-tests.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/static-contract-optimizer-tests.rkt index 0047d3c9..90ef9413 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/static-contract-optimizer-tests.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/unit-tests/static-contract-optimizer-tests.rkt @@ -237,4 +237,15 @@ #:pos (case->/sc (list (arr/sc (list list?/sc) (listof/sc set?/sc) #f))) #:neg (case->/sc (list (arr/sc (list any/sc) any/sc (list list?/sc))))) + (check-optimize + (object/sc (list (member-spec 'field 'x (listof/sc any/sc)))) + #:pos (object/sc (list (member-spec 'field 'x list?/sc))) + #:neg (object/sc (list (member-spec 'field 'x list?/sc)))) + + (check-optimize + (class/sc (list (member-spec 'field 'x (listof/sc any/sc))) #f empty empty) + #:pos (class/sc (list (member-spec 'field 'x list?/sc)) #f empty empty) + #:neg (class/sc (list (member-spec 'field 'x list?/sc)) #f empty empty)) + + ))