diff --git a/collects/tests/typed-racket/optimizer/tests/in-range.rkt b/collects/tests/typed-racket/optimizer/tests/in-range.rkt new file mode 100644 index 00000000..d2965a38 --- /dev/null +++ b/collects/tests/typed-racket/optimizer/tests/in-range.rkt @@ -0,0 +1,10 @@ +#; +( +TR opt: in-range.rkt 6:0 #%module-begin -- in-range +0123) + +#lang typed/scheme +#:optimize + +(for ([i 4]) + (display i)) diff --git a/collects/typed-racket/optimizer/float.rkt b/collects/typed-racket/optimizer/float.rkt index 1203f853..61601432 100644 --- a/collects/typed-racket/optimizer/float.rkt +++ b/collects/typed-racket/optimizer/float.rkt @@ -8,7 +8,7 @@ (types numeric-tower type-table) (optimizer utils numeric-utils logging fixnum)) -(provide float-opt-expr float-arg-expr) +(provide float-opt-expr float-arg-expr int-expr) (define (mk-float-tbl generic) diff --git a/collects/typed-racket/optimizer/sequence.rkt b/collects/typed-racket/optimizer/sequence.rkt index aabb3ecd..71c99363 100644 --- a/collects/typed-racket/optimizer/sequence.rkt +++ b/collects/typed-racket/optimizer/sequence.rkt @@ -6,7 +6,8 @@ "../utils/utils.rkt" "../utils/tc-utils.rkt" (rep type-rep) (types abbrev type-table utils) - (optimizer utils logging string)) + (optimizer utils logging string + float)) ; for int-expr (provide sequence-opt-expr) @@ -86,4 +87,16 @@ 0 (lambda (x) (unsafe-fx< x len)) (lambda (x) #t) + (lambda (x y) #t))))) + (pattern (#%plain-app op:id _ s) ; one-arg in-range + #:when (id-from? #'op 'make-sequence 'racket/private/for) + #:with s*:int-expr #'s + #:with opt + (begin (log-optimization "in-range" seq-opt-msg this-syntax) + #'(let* ((end s*.opt)) + (values (lambda (x) x) + (lambda (x) (unsafe-fx+ 1 x)) + 0 + (lambda (x) (unsafe-fx< x end)) + (lambda (x) #t) (lambda (x y) #t))))))