diff --git a/lib/srfi/160/base.sld b/lib/srfi/160/base.sld index fb75093e..bc46d19f 100644 --- a/lib/srfi/160/base.sld +++ b/lib/srfi/160/base.sld @@ -94,7 +94,13 @@ (define c64vector-length uvector-length) (define c128vector-length uvector-length) (define (list->u1vector ls) (list->uvector SEXP_U1 ls)) - (define (list->u8vector ls) (apply u8vector ls)) + (define (list->u8vector ls) + (let* ((len (length ls)) + (res (make-bytevector len))) + (do ((ls ls (cdr ls)) + (i 0 (+ i 1))) + ((null? ls) res) + (bytevector-u8-set! res i (car ls))))) (define (list->s8vector ls) (list->uvector SEXP_S8 ls)) (define (list->u16vector ls) (list->uvector SEXP_U16 ls)) (define (list->s16vector ls) (list->uvector SEXP_S16 ls)) diff --git a/lib/srfi/160/test.sld b/lib/srfi/160/test.sld index fc2d805d..4c1e76a1 100644 --- a/lib/srfi/160/test.sld +++ b/lib/srfi/160/test.sld @@ -8,6 +8,7 @@ (test-begin "srfi-160: uniform vectors") (test-group "uvectors/constructors" (define a2i '#u32(0 1 2 3 4 5 6 7 8)) + (test '#u8(0 1 2 3 4) (u8vector 0 1 2 3 4)) (test '#u32(0 1 2 3 4) (u32vector 0 1 2 3 4)) (test '#u32(0 1 2 3 4 5 6 7 8 9) (u32vector-unfold (lambda (i x) (values x (+ x 1))) 10 0))