mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-28 16:00:22 +02:00
Fix inference of generic < on NaN values
* module/language/cps/types.scm (<): Don't infer anything if either number could be a flonum.
This commit is contained in:
parent
6f3ae92b37
commit
e79de9d4b5
1 changed files with 7 additions and 5 deletions
|
@ -1051,16 +1051,18 @@ minimum, and maximum."
|
||||||
(restrict! b &bignum -inf.0 (1- (target-most-negative-fixnum)))))
|
(restrict! b &bignum -inf.0 (1- (target-most-negative-fixnum)))))
|
||||||
(else
|
(else
|
||||||
(infer-integer-< a b true?))))
|
(infer-integer-< a b true?))))
|
||||||
(else
|
;; Can't include &flonum because of NaN. Perhaps we should model
|
||||||
|
;; NaN with a separate type bit.
|
||||||
|
((type<=? types &exact-number)
|
||||||
(let ((min0 (&min a)) (max0 (&max a))
|
(let ((min0 (&min a)) (max0 (&max a))
|
||||||
(min1 (&min b)) (max1 (&max b)))
|
(min1 (&min b)) (max1 (&max b)))
|
||||||
(cond
|
(cond
|
||||||
(true?
|
(true?
|
||||||
(restrict! a &real min0 (min max0 max1))
|
(restrict! a &exact-number min0 (min max0 max1))
|
||||||
(restrict! b &real (max min0 min1) max1))
|
(restrict! b &exact-number (max min0 min1) max1))
|
||||||
(else
|
(else
|
||||||
(restrict! a &real (max min0 min1) max0)
|
(restrict! a &exact-number (max min0 min1) max0)
|
||||||
(restrict! b &real min1 (min max0 max1)))))))))
|
(restrict! b &exact-number min1 (min max0 max1)))))))))
|
||||||
|
|
||||||
(define-=-inferrer (u64-= &u64))
|
(define-=-inferrer (u64-= &u64))
|
||||||
(define-predicate-inferrer (u64-< a b true?)
|
(define-predicate-inferrer (u64-< a b true?)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue