From 6eb44688c7bf000bcebedfb35b20459b07c5da53 Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Tue, 14 Jan 2014 23:53:05 -0800 Subject: [PATCH] Optimize cons/sc contracts. original commit: a33b26fc04051e6041dac3951b58c98b6a6cd29e --- .../typed-racket/static-contracts/combinators/derived.rkt | 3 ++- .../typed-racket/static-contracts/optimize.rkt | 1 + .../unit-tests/static-contract-optimizer-tests.rkt | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/derived.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/derived.rkt index d95a3618..fcef3a14 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/derived.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/combinators/derived.rkt @@ -5,7 +5,7 @@ ;; Ex: (listof/sc any/sc) => list?/sc (require "simple.rkt" "structural.rkt" - (for-template racket/base racket/set racket/promise)) + (for-template racket/base racket/list racket/set racket/promise)) (provide (all-defined-out)) (define identifier?/sc (flat/sc #'identifier?)) @@ -13,6 +13,7 @@ (define syntax?/sc (flat/sc #'syntax?)) (define promise?/sc (flat/sc #'promise?)) +(define cons?/sc (flat/sc #'cons?)) (define list?/sc (flat/sc #'list?)) (define set?/sc (flat/sc #'set?)) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/optimize.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/optimize.rkt index a51eb393..0bee1d0f 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/optimize.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/static-contracts/optimize.rkt @@ -39,6 +39,7 @@ ;[(hash/sc: key/sc (none/sc:)) empty-hash/sc] ;; any/sc cases + [(cons/sc: (any/sc:) (any/sc:)) cons?/sc] [(listof/sc: (any/sc:)) list?/sc] [(list/sc: (and scs (any/sc:)) ...) (list-length/sc (length scs))] [(vectorof/sc: (any/sc:)) vector?/sc] 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 78022dd3..947aa6fd 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 @@ -271,4 +271,8 @@ #:pos any/sc #:neg list?/sc) + (check-optimize (cons/sc any/sc list?/sc) + #:pos any/sc + #:neg (cons/sc any/sc list?/sc)) + ))