Make static single flonum checks correct.

Closes PR13499.

original commit: 9030da217bd79249ef694f262a26ede8470180da
This commit is contained in:
Eric Dobson 2013-02-06 23:24:43 -08:00 committed by Vincent St-Amour
parent 83d573bac4
commit a8a37a78eb
2 changed files with 13 additions and 12 deletions

View File

@ -138,6 +138,9 @@
[(-struct #'a #f null) (-struct #'a #f null)]
[(-struct #'a #f (list (make-fld -String #'values #f))) (-struct #'a #f (list (make-fld -String #'values #f)))]
[(-struct #'a #f (list (make-fld -String #'values #f))) (-struct #'a #f (list (make-fld Univ #'values #f)))]
[(-val 0.0f0) -SingleFlonum]
[(-val -0.0f0) -SingleFlonum]
[(-val 1.0f0) -SingleFlonum]
))
(define-go

View File

@ -183,16 +183,14 @@
(define -SingleFlonumPosZero ; disjoint from Flonum 0s
(make-Base 'Single-Flonum-Positive-Zero
;; eqv? equates 0.0f0 with itself, but not eq?
;; we also need to check for single-flonum? since eqv? also equates
;; 0.0f0 and 0.0e0
#'(and/c single-flonum? (lambda (x) (eqv? x 0.0f0)))
(lambda (x) #f) ; can't assign that type at compile-time. see tc-lit for more explanation
#'-SingleFlonumPosZero))
#'(lambda (x) (eqv? x 0.0f0))
(lambda (x) (eqv? x 0.0f0))
#'-SingleFlonumPosZero))
(define -SingleFlonumNegZero
(make-Base 'Single-Flonum-Negative-Zero
#'(and/c single-flonum? (lambda (x) (eqv? x -0.0f0)))
(lambda (x) #f)
#'-SingleFlonumNegZero))
#'(lambda (x) (eqv? x -0.0f0))
(lambda (x) (eqv? x -0.0f0))
#'-SingleFlonumNegZero))
(define -SingleFlonumZero (*Un -SingleFlonumPosZero -SingleFlonumNegZero -SingleFlonumNan))
(define -InexactRealNan (*Un -FlonumNan -SingleFlonumNan))
(define -InexactRealPosZero (*Un -SingleFlonumPosZero -FlonumPosZero))
@ -203,8 +201,8 @@
(define -PosSingleFlonumNoNan
(make-Base 'Positive-Single-Flonum-No-Nan
#'(and/c single-flonum? positive?)
(lambda (x) #f)
#'-PosSingleFlonumNoNan))
(lambda (x) (and (single-flonum? x) (positive? x)))
#'-PosSingleFlonumNoNan))
(define -PosSingleFlonum (*Un -PosSingleFlonumNoNan -SingleFlonumNan))
(define -PosInexactReal (*Un -PosSingleFlonum -PosFlonum))
(define -NonNegSingleFlonum (*Un -PosSingleFlonum -SingleFlonumZero))
@ -212,8 +210,8 @@
(define -NegSingleFlonumNoNan
(make-Base 'Negative-Single-Flonum-No-Nan
#'(and/c single-flonum? negative?)
(lambda (x) #f)
#'-NegSingleFlonumNoNan))
(lambda (x) (and (single-flonum? x) (positive? x)))
#'-NegSingleFlonumNoNan))
(define -NegSingleFlonum (*Un -NegSingleFlonumNoNan -SingleFlonumNan))
(define -NegInexactReal (*Un -NegSingleFlonum -NegFlonum))
(define -NonPosSingleFlonum (*Un -NegSingleFlonum -SingleFlonumZero))