Swap remaining unsafe and chaperone-unsafe operation in the TR optimizer.
Fixes the fix in aba046a92d
.
This commit is contained in:
parent
3d282eba29
commit
1d1d8bacad
|
@ -75,7 +75,7 @@
|
||||||
[new-v v.opt])
|
[new-v v.opt])
|
||||||
;; do the impersonator check up front, to avoid doing it twice (length and op)
|
;; do the impersonator check up front, to avoid doing it twice (length and op)
|
||||||
(if (impersonator? new-v)
|
(if (impersonator? new-v)
|
||||||
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector*-length new-v))])
|
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector-length new-v))])
|
||||||
(if i-known-nonneg?
|
(if i-known-nonneg?
|
||||||
;; we know it's nonnegative, one-sided check
|
;; we know it's nonnegative, one-sided check
|
||||||
one-sided
|
one-sided
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
(op.unsafe new-v new-i new.opt ...)
|
(op.unsafe new-v new-i new.opt ...)
|
||||||
#,safe-fallback) ; will error. to give the right error message
|
#,safe-fallback) ; will error. to give the right error message
|
||||||
;; not an impersonator, can use unsafe-vector* ops
|
;; not an impersonator, can use unsafe-vector* ops
|
||||||
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector-length new-v))])
|
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector*-length new-v))])
|
||||||
(if i-known-nonneg?
|
(if i-known-nonneg?
|
||||||
one-sided
|
one-sided
|
||||||
#`(and (unsafe-fx>= new-i 0)
|
#`(and (unsafe-fx>= new-i 0)
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#;#;
|
||||||
|
#<<END
|
||||||
|
END
|
||||||
|
#<<END
|
||||||
|
passed
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
#lang typed/racket
|
||||||
|
|
||||||
|
(: x (Vectorof Number))
|
||||||
|
(define x (make-vector 0 0))
|
||||||
|
(: y (Vectorof Float))
|
||||||
|
(define z (cast x '#()))
|
||||||
|
(define y (cast z (Vectorof Float)))
|
||||||
|
|
||||||
|
;; should error
|
||||||
|
(with-handlers ([exn:fail:contract?
|
||||||
|
(lambda (e)
|
||||||
|
(when (regexp-match "index is out of range for empty vector"
|
||||||
|
(exn-message e))
|
||||||
|
(display "passed\n")))])
|
||||||
|
(vector-set! y 1 3.0))
|
Loading…
Reference in New Issue
Block a user