From dd67d22b9540b3d795cc0c80f60eac4889963afc Mon Sep 17 00:00:00 2001 From: Gustavo Massaccesi Date: Thu, 28 Mar 2019 22:36:01 -0300 Subject: [PATCH] cptypes: reduce (if t x) ==> (begin (if t (void)) x) so the surrounding code can be reduced, for example (+ 2 (if t 3)) ==> (begin (if t (void)) 5) original commit: c1993e7c707b3528c6de5e1d4b36005655d22aff --- mats/cp0.ms | 4 ++-- mats/record.ms | 5 +++-- s/cptypes.ss | 9 +++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/mats/cp0.ms b/mats/cp0.ms index bade6706b7..36941f4510 100644 --- a/mats/cp0.ms +++ b/mats/cp0.ms @@ -2873,7 +2873,7 @@ (display "1") (list q n)))))) '(lambda (v) - (let ([v2 (if (#2%vector? v) v (#2%error))]) + (let ([v2 (begin (if (#2%vector? v) (#2%void) (#2%error)) v)]) (let ([q (#2%vector-sort v2)] [n (#3%vector-length v)]) (#2%display "1") (#2%list q n))))) @@ -2886,7 +2886,7 @@ (display "1") (list q n)))))) '(lambda (v) - (let ([q (#2%vector-sort (if (#2%vector? v) v (#2%error)))] + (let ([q (#2%vector-sort (begin (if (#2%vector? v) (#2%void) (#2%error)) v))] [n (if v v 72)]) (#2%display "1") (#2%list q n)))) diff --git a/mats/record.ms b/mats/record.ms index 4d9726dd14..2cb281024e 100644 --- a/mats/record.ms +++ b/mats/record.ms @@ -8586,8 +8586,9 @@ (if b (frob-x x) 72))))) `(lambda (b) (if b - (#3%$record-oops 'frob-x 'x ',record-type-descriptor?) - 72))) + (#3%$record-oops 'frob-x 'x ',record-type-descriptor?) + (#2%void)) + 72)) (equivalent-expansion? (parameterize ([optimize-level 3] [enable-cp0 #t] [#%$suppress-primitive-inlining #f]) (expand/optimize diff --git a/s/cptypes.ss b/s/cptypes.ss index 9d42b73fa8..cc46bfd0de 100644 --- a/s/cptypes.ss +++ b/s/cptypes.ss @@ -688,10 +688,15 @@ Notes: [(f-types3) (or f-types3 types3)]) (let ([ir `(if ,e1 ,e2 ,e3)]) (cond - [(predicate-implies? ret2 'bottom) ;check bottom first + [(and (predicate-implies? ret2 'bottom) ;check bottom first + (predicate-implies? ret3 'bottom)) ;check bottom first (values ir ret3 types3 t-types3 f-types3)] + [(predicate-implies? ret2 'bottom) ;check bottom first + (values (make-seq ctxt `(if ,e1 ,e2 ,void-rec) e3) + ret3 types3 t-types3 f-types3)] [(predicate-implies? ret3 'bottom) ;check bottom first - (values ir ret2 types2 t-types2 f-types2)] + (values (make-seq ctxt `(if ,e1 ,void-rec ,e3) e2) + ret2 types2 t-types2 f-types2)] [else (let ([new-types (pred-env-union/super-base types2 t-types1 types3 f-types1