mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Add exact-integer? as interesting Tree-IL effect-free primitive
* module/language/tree-il/primitives.scm (*interesting-primitive-names*): (*effect-free-primitives*, *effect+exception-free-primitives*): Detect use of exact-integer?. * module/language/tree-il/compile-cps.scm (canonicalize): Compile exact-integer? to a fixnum?-or-bignum? check.
This commit is contained in:
parent
72c3107539
commit
980de88902
3 changed files with 13 additions and 1 deletions
|
@ -1352,7 +1352,6 @@ minimum, and maximum."
|
|||
;; FIXME: If it's a flonum it may be an integer, but if it's not an
|
||||
;; integer it also may be still be a flonum.
|
||||
;; (define-simple-type-predicate-inferrer integer? (logior &exact-integer &flonum))
|
||||
(define-simple-type-predicate-inferrer exact-integer? &exact-integer)
|
||||
|
||||
(define-simple-type-checker (exact? &number))
|
||||
(define-type-inferrer (exact? val result)
|
||||
|
|
|
@ -1072,6 +1072,16 @@ integer."
|
|||
(($ <conditional>)
|
||||
(reduce-conditional exp))
|
||||
|
||||
(($ <primcall> src 'exact-integer? (x))
|
||||
;; Both fixnum? and bignum? are branching primitives.
|
||||
(with-lexicals src (x)
|
||||
(make-conditional
|
||||
src (make-primcall src 'fixnum? (list x))
|
||||
(make-const src #t)
|
||||
(make-conditional src (make-primcall src 'bignum? (list x))
|
||||
(make-const src #t)
|
||||
(make-const src #f)))))
|
||||
|
||||
(($ <primcall> src '<= (a b))
|
||||
;; No need to reduce as < is a branching primitive.
|
||||
(make-conditional src (make-primcall src '< (list b a))
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
procedure? thunk?
|
||||
|
||||
complex? real? rational? inf? nan? integer? exact? inexact? even? odd?
|
||||
exact-integer?
|
||||
|
||||
char<? char<=? char>=? char>?
|
||||
|
||||
|
@ -174,6 +175,7 @@
|
|||
symbol? variable? vector? struct? string? number? char?
|
||||
bytevector? keyword? bitvector? atomic-box?
|
||||
complex? real? rational? inf? nan? integer? exact? inexact? even? odd?
|
||||
exact-integer?
|
||||
char<? char<=? char>=? char>?
|
||||
integer->char char->integer number->string string->number
|
||||
struct-vtable
|
||||
|
@ -194,6 +196,7 @@
|
|||
not
|
||||
pair? null? nil? list?
|
||||
symbol? variable? vector? struct? string? number? char?
|
||||
exact-integer?
|
||||
bytevector? keyword? bitvector?
|
||||
procedure? thunk? atomic-box?
|
||||
acons cons cons* list vector))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue