Add types for unsafe fixnum operations. This allows support for some sequences; in particular in-range now works in some cases (though still requires type annotations).

svn: r18333
This commit is contained in:
Noel Welsh 2010-02-25 11:48:33 +00:00
parent 35255c1415
commit 3d95ef650c

View File

@ -641,6 +641,7 @@
;; unsafe
[unsafe-vector-ref (-poly (a) ((-vec a) -Nat . -> . a))]
[unsafe-vector-length (-poly (a) ((-vec a) . -> . -Nat))]
[unsafe-car (-poly (a b)
(cl->*
@ -649,6 +650,42 @@
(cl->*
(->acc (list (-pair a b)) b (list -cdr))))]
[unsafe-fx+
(cl->
[(-Integer -Integer) -Integer]
[(-Nat -Nat) -Nat])]
[unsafe-fx- (-Integer -Integer . -> . -Integer)]
[unsafe-fx*
(cl->
[(-Integer -Integer) -Integer]
[(-Nat -Nat) -Nat])]
[unsafe-fxquotient (-Integer -Integer . -> . -Integer)]
[unsafe-fxremainder (-Integer -Integer . -> . -Integer)]
[unsafe-fxmodulo (-Integer -Integer . -> . -Integer)]
[unsafe-fxabs (-Integer . -> . -Nat)]
[unsafe-fxand (-Integer -Integer . -> . -Integer)]
[unsafe-fxior (-Integer -Integer . -> . -Integer)]
[unsafe-fxxor (-Integer -Integer . -> . -Integer)]
[unsafe-fxnot (-Integer . -> . -Integer)]
[unsafe-fxlshift (-Integer -Integer . -> . -Integer)]
[unsafe-fxrshift (-Integer -Integer . -> . -Integer)]
[unsafe-fx= (-Integer -Integer . -> . -Boolean)]
[unsafe-fx< (-Integer -Integer . -> . -Boolean)]
[unsafe-fx> (-Integer -Integer . -> . -Boolean)]
[unsafe-fx<= (-Integer -Integer . -> . -Boolean)]
[unsafe-fx>= (-Integer -Integer . -> . -Boolean)]
[unsafe-fxmin
(cl->
[(-Integer -Integer) -Integer]
[(-Nat -Nat) -Nat])]
[unsafe-fxmax
(cl->
[(-Integer -Integer) -Integer]
[(-Nat -Nat) -Nat])]
;; scheme/vector
[vector-count (-polydots (a b)
((list