racket/collects/racket/fixnum.rkt
Noel Welsh cfa7b727f4 Fix some errors with in-vector and derived forms:
- Range checking was inconsistent between the sequence and macro forms
- The macro form could crash due to unsafe vector refs

Fixes involved refactoring the range checks so they are shared between both versions, and changing the contract slightly so start and stop are checked before the sequence runs. This allows unsafe vector refs and earlier error notifications at the cost making some valid programs (e.g. those using some condition to stop a comprehension hitting an invalid index) now be invalid. Only crazy people would rely on the old behaviour, so it isn't a problem in practice.
2010-12-13 13:38:35 +00:00

29 lines
807 B
Racket

#lang scheme/base
(require '#%flfxnum
"private/vector-wraps.rkt"
"unsafe/ops.rkt"
(for-syntax racket/base))
(provide fx->fl fl->fx
fxabs
fx+ fx- fx*
fxquotient fxremainder fxmodulo
fxand fxior fxxor
fxnot fxrshift fxlshift
fx>= fx> fx= fx< fx<=
fxmin fxmax
fxvector? fxvector make-fxvector
shared-fxvector make-shared-fxvector
fxvector-length fxvector-ref fxvector-set!
fxvector-copy
in-fxvector for/fxvector for*/fxvector)
(define-vector-wraps "fxvector"
fxvector? fxvector-length fxvector-ref fxvector-set! make-fxvector
unsafe-fxvector-ref unsafe-fxvector-set! unsafe-fxvector-length
in-fxvector*
in-fxvector
for/fxvector
for*/fxvector
fxvector-copy)