From 84931448b57f4c044e8c40a46f85c024de6262e7 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 22 Jul 2011 16:38:15 -0400 Subject: [PATCH] Flip order of type simplification passes. --- .../typed-scheme/typecheck/tc-app-helper.rkt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/collects/typed-scheme/typecheck/tc-app-helper.rkt b/collects/typed-scheme/typecheck/tc-app-helper.rkt index a1e58ba9aa..a444a1641c 100644 --- a/collects/typed-scheme/typecheck/tc-app-helper.rkt +++ b/collects/typed-scheme/typecheck/tc-app-helper.rkt @@ -222,30 +222,30 @@ [candidates '()] ; from cases [parts-acc '()]) ; from parts - ;; discard subsumed cases (supertype modulo filters) + ;; keep only the domains for which the associated function type + ;; is consistent with the expected type (if (not (null? cases)) - (let ([head (car cases)] [tail (cdr cases)]) - (if (is-subsumed-in? head tail) - (loop tail (cdr parts) - candidates parts-acc) ; we discard this one - (loop tail (cdr parts) - (cons head candidates) ; we keep this one - (cons (car parts) parts-acc)))) + (if (returns-subtype-of-expected? (car cases)) + (loop (cdr cases) (cdr parts) + (cons (car cases) candidates) ; we keep this one + (cons (car parts) parts-acc)) + (loop (cdr cases) (cdr parts) + candidates parts-acc)) ; we discard this one - ;; keep only the domains for which the associated function type - ;; is consistent with the expected type + ;; discard subsumed cases (supertype modulo filters) (let loop ([cases candidates] [parts parts-acc] ;; accumulators [candidates '()] [parts-acc '()]) (if (not (null? cases)) - (if (returns-subtype-of-expected? (car cases)) - (loop (cdr cases) (cdr parts) - (cons (car cases) candidates) ; we keep this one - (cons (car parts) parts-acc)) - (loop (cdr cases) (cdr parts) - candidates parts-acc)) ; we discard this one + (let ([head (car cases)] [tail (cdr cases)]) + (if (is-subsumed-in? head tail) + (loop tail (cdr parts) + candidates parts-acc) ; we discard this one + (loop tail (cdr parts) + (cons head candidates) ; we keep this one + (cons (car parts) parts-acc)))) ;; among the domains that fit with the expected type, we only ;; need to keep the most liberal