From 43683352c56a1d07e72cf74ae481a277fb392f50 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Mon, 19 Jul 2010 12:26:53 -0400 Subject: [PATCH] Improved behavior of coercions with n-ary arithmeric operations. original commit: d078305a59368156e0c977798af4cb805bc3b679 --- .../typed-scheme/private/base-env-numeric.rkt | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/collects/typed-scheme/private/base-env-numeric.rkt b/collects/typed-scheme/private/base-env-numeric.rkt index af0a873f..184e8a68 100644 --- a/collects/typed-scheme/private/base-env-numeric.rkt +++ b/collects/typed-scheme/private/base-env-numeric.rkt @@ -235,29 +235,24 @@ [* (apply cl->* (append (for/list ([t (list -Pos -Nat -Integer -ExactRational -NonnegativeFlonum -Flonum)]) (->* (list) t t)) - (list (->* (list -Pos) -NonnegativeFlonum -NonnegativeFlonum)) - (list (->* (list -NonnegativeFlonum) -Pos -NonnegativeFlonum)) - (list (->* (list -Pos) -Flonum -Flonum)) - (list (->* (list -Flonum) -Pos -Flonum)) + (list (->* (list) (Un -Pos -NonnegativeFlonum) -NonnegativeFlonum)) + (list (->* (list) (Un -Pos -Flonum) -Flonum)) (list (->* (list) -Real -Real)) - (list (->* (list -Flonum) -InexactComplex -InexactComplex)) - (list (->* (list -InexactComplex) -Flonum -InexactComplex)) - (list (->* (list) -InexactComplex -InexactComplex)) + (list (->* (list) (Un -InexactComplex -Flonum) -InexactComplex)) (list (->* (list) N N))))] [+ (apply cl->* (append (list (->* (list -Pos) -Nat -Pos)) - (list (->* (list -Nat) -Pos -Pos)) + (list (->* (list -Nat -Pos) -Nat -Pos)) (for/list ([t (list -Nat -Integer -ExactRational -NonnegativeFlonum -Flonum)]) (->* (list) t t)) - (list (->* (list -Nat) -NonnegativeFlonum -NonnegativeFlonum)) - (list (->* (list -NonnegativeFlonum) -Nat -NonnegativeFlonum)) ;; special cases for promotion to inexact, not exhaustive ;; valid for + and -, but not for * and /, since (* 0) is exact 0 (i.e. not a float) + (list (->* (list) (Un -Nat -NonnegativeFlonum) -NonnegativeFlonum)) (list (->* (list -Flonum) -Real -Flonum)) (list (->* (list -Real -Flonum) -Real -Flonum)) (list (->* (list) -Real -Real)) - (list (->* (list N) -InexactComplex -InexactComplex)) + (list (->* (list) (Un -Real -InexactComplex) -InexactComplex)) (list (->* (list -InexactComplex) N -InexactComplex)) - (list (->* (list) -InexactComplex -InexactComplex)) + (list (->* (list N -InexactComplex) N -InexactComplex)) (list (->* (list) N N))))] [- (apply cl->* @@ -266,9 +261,9 @@ (list (->* (list -Flonum) -Real -Flonum)) (list (->* (list -Real -Flonum) -Real -Flonum)) (list (->* (list -Real) -Real -Real)) - (list (->* (list N) -InexactComplex -InexactComplex)) + (list (->* (list) (Un -Real -InexactComplex) -InexactComplex)) (list (->* (list -InexactComplex) N -InexactComplex)) - (list (->* (list -InexactComplex) -InexactComplex -InexactComplex)) + (list (->* (list N -InexactComplex) N -InexactComplex)) (list (->* (list N) N N))))] [/ (apply cl->* (append (list (->* (list -Integer) -Integer -ExactRational)) @@ -277,8 +272,7 @@ ;; only exact 0 as first argument can cause the result of a division involving inexacts to be exact (list (->* (list -Flonum) -Real -Flonum)) (list (->* (list -Real) -Real -Real)) - (list (->* (list -Flonum) -InexactComplex -InexactComplex)) - (list (->* (list -InexactComplex) -Flonum -InexactComplex)) + (list (->* (list (Un -Flonum -InexactComplex)) (Un -Real -InexactComplex) -InexactComplex)) (list (->* (list -InexactComplex) -InexactComplex -InexactComplex)) (list (->* (list N) N N))))]