(EXPT FIXNUM INTEGER) was inferred to be of type FIXNUM.

This commit is contained in:
Juan Jose Garcia Ripoll 2012-07-14 23:22:25 +02:00
parent 18596a1368
commit 3b4ed64ded

View file

@ -219,13 +219,16 @@
(def-type-propagator expt (fname base exponent)
;; Rules:
;; (expt number-type integer) -> number-type
;; (expt fixnum integer) -> integer
;; (expt number-type integer) -> number-type
;; (expt number-type1 number-type2) -> (max-float number-type1 number-type2)
;;
(let ((exponent (ensure-real-type exponent)))
(values (list base exponent)
(cond ((eql exponent 'integer)
base)
(if (subtypep base 'fixnum)
'integer
base))
((type>= '(real 0 *) base)
(let* ((exponent (ensure-nonrational-type exponent)))
(maximum-number-type exponent base)))