From 7708b2056a9b1a90108720285ac2f19cbc302a63 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 25 Dec 2015 14:12:36 -0600 Subject: [PATCH] use specialize-procedure on predicate portion or or/c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This seems to give about a 10% speedup on this program: #lang racket/base (require racket/contract/base) (define f (contract (-> (or/c number? symbol?) any) (λ (x) 0) 'pos 'neg)) (time (for ([_ (in-range 1000000)]) (f 'x) (f 'x) (f 'x) (f 'x))) --- racket/collects/racket/contract/private/orc.rkt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/racket/collects/racket/contract/private/orc.rkt b/racket/collects/racket/contract/private/orc.rkt index dcb8bfc566..b8455f226c 100644 --- a/racket/collects/racket/contract/private/orc.rkt +++ b/racket/collects/racket/contract/private/orc.rkt @@ -70,7 +70,8 @@ [(null? rst) fst-pred] [else (let ([r (loop (car rst) (cdr rst))]) - (λ (x) (or (fst-pred x) (r x))))])))])) + (procedure-specialize + (λ (x) (or (fst-pred x) (r x)))))])))])) (define (single-or/c-late-neg-projection ctc) (define c-proj (get/build-late-neg-projection (single-or/c-ho-ctc ctc)))