wrong alignment check in bytevector-{s,u}64-set! fixed.

This commit is contained in:
Abdulaziz Ghuloum 2009-08-02 21:23:27 +03:00
parent c67865ff09
commit 7e5b27f822
2 changed files with 30 additions and 17 deletions

View File

@ -1096,7 +1096,7 @@
($bytevector-ref/64 bv i 'bytevector-s64-ref
bytevector-sint-ref endianness))
(define ($bytevector-set/64 bv i n lo hi who setter endianness)
(define ($bytevector-set/64/align bv i n lo hi who setter endianness)
(if (bytevector? bv)
(if (and (fixnum? i)
($fx>= i 0)
@ -1105,11 +1105,7 @@
(case endianness
[(little big)
(unless (or (fixnum? n) (bignum? n))
(die who
(if (number? n)
"number is not exact"
"not a number")
n))
(die who "number is not an exact number" n))
(unless (and (<= lo n) (< n hi))
(die who "number out of range" n))
(setter bv i n endianness 8)]
@ -1117,18 +1113,35 @@
(die who "invalid index" i))
(die who "not a bytevector" bv)))
(define (bytevector-u64-native-set! bv i n)
(define ($bytevector-set/64 bv i n lo hi who setter endianness)
(if (bytevector? bv)
(if (and (fixnum? i)
($fx>= i 0)
($fx< i ($fx- ($bytevector-length bv) 7)))
(case endianness
[(little big)
(unless (or (fixnum? n) (bignum? n))
(die who "number is not exact number" n))
(unless (and (<= lo n) (< n hi))
(die who "number out of range" n))
(setter bv i n endianness 8)]
[else (die who "invalid endianness" endianness)])
(die who "invalid index" i))
(die who "not a bytevector" bv)))
(define (bytevector-u64-native-set! bv i n)
($bytevector-set/64/align bv i n 0 (expt 2 64)
'bytevector-u64-native-set! bytevector-uint-set! 'little))
(define (bytevector-s64-native-set! bv i n)
($bytevector-set/64/align bv i n (- (expt 2 63)) (expt 2 63)
'bytevector-s64-native-set! bytevector-sint-set! 'little))
(define (bytevector-u64-set! bv i n endianness)
($bytevector-set/64 bv i n 0 (expt 2 64)
'bytevector-u64-native-ref bytevector-uint-set! 'little))
(define (bytevector-s64-native-set! bv i n)
'bytevector-u64-set! bytevector-uint-set! endianness))
(define (bytevector-s64-set! bv i n endianness)
($bytevector-set/64 bv i n (- (expt 2 63)) (expt 2 63)
'bytevector-s64-native-ref bytevector-sint-set! 'little))
(define (bytevector-u64-set! bv i n endianness)
($bytevector-set/64 bv i n 0 (expt 2 64)
'bytevector-u64-ref bytevector-uint-set! endianness))
(define (bytevector-s64-set! bv i n endianness)
($bytevector-set/64 bv i n (- (expt 2 63)) (expt 2 63)
'bytevector-s64-ref bytevector-sint-set! endianness))
'bytevector-s64-set! bytevector-sint-set! endianness))
)

View File

@ -1 +1 @@
1839
1840