~ chicken-core (chicken-5) 45874a8badda0b19f6a0c5f52b3824c4a0022c6a
commit 45874a8badda0b19f6a0c5f52b3824c4a0022c6a Author: Peter Bex <peter@more-magic.net> AuthorDate: Fri Feb 6 22:18:40 2015 +0100 Commit: Peter Bex <peter@more-magic.net> CommitDate: Sun May 31 14:18:25 2015 +0200 Fix srfi-4 integer vectors so they operate on exact integers. Add better arg checking and improve tests. TODO: Add s64vectors and u64vectors. diff --git a/c-platform.scm b/c-platform.scm index b59a87c0..1286844b 100644 --- a/c-platform.scm +++ b/c-platform.scm @@ -184,7 +184,7 @@ ##sys#check-port ##sys#check-input-port ##sys#check-output-port ##sys#check-open-port ##sys#check-char ##sys#check-vector ##sys#check-byte-vector ##sys#list ##sys#cons - ##sys#call-with-values ##sys#fits-in-int? ##sys#fits-in-unsigned-int? ##sys#flonum-in-fixnum-range? + ##sys#call-with-values ##sys#flonum-in-fixnum-range? ##sys#fudge ##sys#immediate? ##sys#direct-return ##sys#context-switch ##sys#make-structure ##sys#apply ##sys#apply-values ##sys#continuation-graft ##sys#bytevector? ##sys#make-vector ##sys#setter ##sys#car ##sys#cdr ##sys#pair? @@ -200,13 +200,10 @@ (for-each (cut mark-variable <> '##compiler#pure '#t) '(##sys#slot ##sys#block-ref ##sys#size ##sys#byte - ##sys#pointer? ##sys#generic-structure? ##sys#fits-in-int? ##sys#fits-in-unsigned-int? ##sys#flonum-in-fixnum-range? - ##sys#fudge ##sys#immediate? - ##sys#bytevector? ##sys#pair? - ##sys#eq? ##sys#list? ##sys#vector? ##sys#eqv? + ##sys#pointer? ##sys#generic-structure? ##sys#fudge ##sys#immediate? + ##sys#bytevector? ##sys#pair? ##sys#eq? ##sys#list? ##sys#vector? ##sys#eqv? ##sys#get-keyword ; ok it isn't, but this is only used for ext. llists - ##sys#void - ##sys#permanent?)) + ##sys#void ##sys#permanent?)) ;;; Rewriting-definitions for this platform: @@ -733,9 +730,6 @@ (rewrite 'string=? 17 2 "C_i_string_equal_p" "C_u_i_string_equal_p") (rewrite 'string-ci=? 17 2 "C_i_string_ci_equal_p") (rewrite '##sys#fudge 17 1 "C_fudge") -(rewrite '##sys#fits-in-int? 17 1 "C_fits_in_int_p") -(rewrite '##sys#fits-in-unsigned-int? 17 1 "C_fits_in_unsigned_int_p") -(rewrite '##sys#flonum-in-fixnum-range? 17 1 "C_flonum_in_fixnum_range_p") (rewrite '##sys#permanent? 17 1 "C_permanentp") (rewrite '##sys#null-pointer? 17 1 "C_null_pointerp" "C_null_pointerp") (rewrite '##sys#immediate? 17 1 "C_immp") diff --git a/chicken.h b/chicken.h index 52a4805f..ff85bca7 100644 --- a/chicken.h +++ b/chicken.h @@ -1437,6 +1437,7 @@ extern double trunc(double); #define C_pointer_eqp(x, y) C_mk_bool(C_c_pointer_nn(x) == C_c_pointer_nn(y)) #define C_a_int_to_num(ptr, n, i) C_int_to_num(ptr, i) #define C_a_unsigned_int_to_num(ptr, n, i) C_unsigned_int_to_num(ptr, i) +/* XXX TODO OBSOLETE: This can be removed after recompiling c-backend.scm */ #define C_a_double_to_num(ptr, n) C_double_to_number(C_flonum(ptr, n)) #define C_a_i_vector C_vector #define C_list C_a_i_list @@ -2247,6 +2248,7 @@ C_inline C_word C_string_to_pbytevector(C_word s) } +/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */ C_inline C_word C_flonum_in_fixnum_range_p(C_word n) { double f = C_flonum_magnitude(n); @@ -2254,7 +2256,7 @@ C_inline C_word C_flonum_in_fixnum_range_p(C_word n) return C_mk_bool(f <= (double)C_MOST_POSITIVE_FIXNUM && f >= (double)C_MOST_NEGATIVE_FIXNUM); } - +/* XXX TODO OBSOLETE: This can be removed after recompiling c-backend.scm */ C_inline C_word C_double_to_number(C_word n) { double m, f = C_flonum_magnitude(n); @@ -2305,6 +2307,7 @@ C_inline C_word C_bignum2(C_word **ptr, int negp, C_uword d1, C_uword d2) } +/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */ C_inline C_word C_fits_in_int_p(C_word x) { double n, m; @@ -2317,12 +2320,12 @@ C_inline C_word C_fits_in_int_p(C_word x) !(C_bignum_digits(x)[0] & C_INT_SIGN_BIT))); } - /* XXX OBSOLETE remove on the next round, remove check above */ n = C_flonum_magnitude(x); return C_mk_bool(C_modf(n, &m) == 0.0 && n >= C_WORD_MIN && n <= C_WORD_MAX); } +/* XXX TODO OBSOLETE: This can be removed after recompiling c-platform.scm */ C_inline C_word C_fits_in_unsigned_int_p(C_word x) { double n, m; @@ -2345,6 +2348,11 @@ C_inline double C_c_double(C_word x) else return C_flonum_magnitude(x); } +C_inline C_word C_a_u_i_int_to_flo(C_word **ptr, int n, C_word x) +{ + if(x & C_FIXNUM_BIT) return C_a_i_fix_to_flo(ptr, n, x); + else return C_a_u_i_big_to_flo(ptr, n, x); +} C_inline C_word C_num_to_int(C_word x) { diff --git a/library.scm b/library.scm index 2544fc56..9e94bf32 100644 --- a/library.scm +++ b/library.scm @@ -971,9 +971,6 @@ EOF (define (inexact? x) (##core#inline "C_i_inexactp" x)) (define ##sys#exact? exact?) (define ##sys#inexact? inexact?) -(define (##sys#fits-in-int? n) (##core#inline "C_fits_in_int_p" n)) -(define (##sys#fits-in-unsigned-int? n) (##core#inline "C_fits_in_unsigned_int_p" n)) -(define (##sys#flonum-in-fixnum-range? n) (##core#inline "C_flonum_in_fixnum_range_p" n)) (define (zero? n) (##core#inline "C_i_zerop" n)) (define (positive? n) (##core#inline "C_i_positivep" n)) (define (negative? n) (##core#inline "C_i_negativep" n)) diff --git a/srfi-4.scm b/srfi-4.scm index dea9441a..d00137cf 100644 --- a/srfi-4.scm +++ b/srfi-4.scm @@ -41,14 +41,10 @@ EOF ;;; Helper routines: -(declare (hide ##sys#check-fixnum-interval)) - -(define ##sys#check-fixnum-interval - (lambda (n from to loc) - (##sys#check-fixnum n loc) - (if (or (##core#inline "C_fixnum_lessp" n from) - (##core#inline "C_fixnum_greaterp" n to) ) - (##sys#error loc "numeric value is not in expected range" n from to) ) ) ) +(define-inline (check-int/flonum x loc) + (unless (or (##core#inline "C_i_exact_integerp" x) + (##core#inline "C_i_flonump" x)) + (##sys#error-hook (foreign-value "C_BAD_ARGUMENT_TYPE_NO_FLONUM_ERROR" int) loc x) ) ) (define-inline (check-range i from to loc) (##sys#check-fixnum i loc) @@ -57,6 +53,18 @@ EOF (foreign-value "C_OUT_OF_RANGE_ERROR" int) loc i from to) ) ) +(define-inline (check-uint-length obj len loc) + (##sys#check-exact-uinteger obj loc) + (when (fx> (integer-length obj) len) + (##sys#error-hook + (foreign-value "C_OUT_OF_RANGE_ERROR" int) loc obj 0 (expt 2 len)))) + +(define-inline (check-int-length obj len loc) + (##sys#check-exact-integer obj loc) + (when (fx> (integer-length obj) (fx- len 1)) + (##sys#error-hook + (foreign-value "C_OUT_OF_RANGE_ERROR" int) + loc obj (- (expt 2 len)) (sub1 (expt 2 len))))) ;;; Get vector length: @@ -92,84 +100,75 @@ EOF (##sys#check-structure x 'f64vector 'f64vector-length) (##core#inline "C_u_i_64vector_length" x)) +;; XXX TODO: u64/s64-vectors ;;; Safe accessors: (define (u8vector-set! x i y) (##sys#check-structure x 'u8vector 'u8vector-set!) (let ((len (##core#inline "C_u_i_8vector_length" x))) - (##sys#check-fixnum y 'u8vector-set!) - (when (fx< y 0) - (##sys#error 'u8vector-set! "argument may not be negative" y)) + (check-uint-length y 8 'u8vector-set!) (check-range i 0 len 'u8vector-set!) (##core#inline "C_u_i_u8vector_set" x i y))) (define (s8vector-set! x i y) (##sys#check-structure x 's8vector 's8vector-set!) (let ((len (##core#inline "C_u_i_8vector_length" x))) - (##sys#check-fixnum y 's8vector-set!) + (check-int-length y 8 's8vector-set!) (check-range i 0 len 's8vector-set!) (##core#inline "C_u_i_s8vector_set" x i y))) (define (u16vector-set! x i y) (##sys#check-structure x 'u16vector 'u16vector-set!) (let ((len (##core#inline "C_u_i_16vector_length" x))) - (##sys#check-fixnum y 'u16vector-set!) - (when (fx< y 0) - (##sys#error 'u16vector-set! "argument may not be negative" y)) + (check-uint-length y 16 'u16vector-set!) (check-range i 0 len 'u16vector-set!) (##core#inline "C_u_i_u16vector_set" x i y))) (define (s16vector-set! x i y) (##sys#check-structure x 's16vector 's16vector-set!) (let ((len (##core#inline "C_u_i_16vector_length" x))) - (##sys#check-fixnum y 's16vector-set!) + (check-int-length y 16 's16vector-set!) (check-range i 0 len 's16vector-set!) (##core#inline "C_u_i_s16vector_set" x i y))) (define (u32vector-set! x i y) (##sys#check-structure x 'u32vector 'u32vector-set!) (let ((len (##core#inline "C_u_i_32vector_length" x))) - (##sys#check-integer y 'u32vector-set!) - (cond ((negative? y) - (##sys#error 'u32vector-set! "argument may not be negative" y) ) - ((not (##sys#fits-in-unsigned-int? y)) - (##sys#error 'u32vector-set! "argument exceeds integer range" y) ) ) + (check-uint-length y 32 'u32vector-set!) (check-range i 0 len 'u32vector-set!) (##core#inline "C_u_i_u32vector_set" x i y))) (define (s32vector-set! x i y) (##sys#check-structure x 's32vector 's32vector-set!) (let ((len (##core#inline "C_u_i_32vector_length" x))) - (##sys#check-integer y 's32vector-set!) - (unless (##sys#fits-in-int? y) - (##sys#error 's32vector-set! "argument exceeds integer range" y) ) + (check-int-length y 32 's32vector-set!) (check-range i 0 len 's32vector-set!) (##core#inline "C_u_i_s32vector_set" x i y))) (define (f32vector-set! x i y) (##sys#check-structure x 'f32vector 'f32vector-set!) (let ((len (##core#inline "C_u_i_32vector_length" x))) - (##sys#check-number y 'f32vector-set!) + (check-int/flonum y 'f32vector-set!) (check-range i 0 len 'f32vector-set!) (##core#inline "C_u_i_f32vector_set" x i - (if (##core#inline "C_blockp" y) + (if (##core#inline "C_i_flonump" y) y - (##core#inline_allocate ("C_a_i_fix_to_flo" 4) y))))) + (##core#inline_allocate ("C_a_u_i_int_to_flo" 4) y))))) (define (f64vector-set! x i y) (##sys#check-structure x 'f64vector 'f64vector-set!) (let ((len (##core#inline "C_u_i_64vector_length" x))) - (##sys#check-number y 'f64vector-set!) + (check-int/flonum y 'f64vector-set!) (check-range i 0 len 'f64vector-set!) (##core#inline "C_u_i_f64vector_set" x i - (if (##core#inline "C_blockp" y) + (if (##core#inline "C_i_flonump" y) y - (##core#inline_allocate ("C_a_i_fix_to_flo" 4) y))))) + (##core#inline_allocate ("C_a_u_i_int_to_flo" 4) y))))) (define u8vector-ref (getter-with-setter @@ -287,7 +286,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum-interval init 0 #xff 'make-u8vector) + (check-uint-length init 8 'make-u8vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_u8vector_set" v i init) ) ) ) ) ) ) @@ -300,7 +299,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum-interval init -128 127 'make-s8vector) + (check-uint-length init 8 'make-s8vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_s8vector_set" v i init) ) ) ) ) ) ) @@ -313,7 +312,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum-interval init 0 #xffff 'make-u16vector) + (check-uint-length init 16 'make-u16vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_u16vector_set" v i init) ) ) ) ) ) ) @@ -326,7 +325,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum-interval init -32768 32767 'make-s16vector) + (check-int-length init 16 'make-s16vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_s16vector_set" v i init) ) ) ) ) ) ) @@ -339,7 +338,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum init 'make-u32vector) + (check-uint-length init 32 'make-u32vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_u32vector_set" v i init) ) ) ) ) ) ) @@ -352,7 +351,7 @@ EOF (if (not init) v (begin - (##sys#check-fixnum init 'make-s32vector) + (check-int-length init 32 'make-s32vector) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_s32vector_set" v i init) ) ) ) ) ) ) @@ -365,9 +364,9 @@ EOF (if (not init) v (begin - (##sys#check-number init 'make-f32vector) - (unless (##core#inline "C_blockp" init) - (set! init (##core#inline_allocate ("C_a_i_fix_to_flo" 4) init)) ) + (check-int/flonum init 'make-f32vector) + (unless (##core#inline "C_i_flonump" init) + (set! init (##core#inline_allocate ("C_a_u_i_int_to_flo" 4) init))) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_f32vector_set" v i init) ) ) ) ) ) ) @@ -382,9 +381,9 @@ EOF (if (not init) v (begin - (##sys#check-number init 'make-f64vector) - (unless (##core#inline "C_blockp" init) - (set! init (##core#inline_allocate ("C_a_i_fix_to_flo" 4) init)) ) + (check-int/flonum init 'make-f64vector) + (unless (##core#inline "C_i_flonump" init) + (set! init (##core#inline_allocate ("C_a_u_i_int_to_flo" 4) init)) ) (do ((i 0 (##core#inline "C_fixnum_plus" i 1))) ((##core#inline "C_fixnum_greater_or_equal_p" i len) v) (##core#inline "C_u_i_f64vector_set" v i init) ) ) ) ) ) ) ) diff --git a/tests/srfi-4-tests.scm b/tests/srfi-4-tests.scm index addbf56d..7d4eabff 100644 --- a/tests/srfi-4-tests.scm +++ b/tests/srfi-4-tests.scm @@ -2,36 +2,58 @@ (use srfi-4 ports) - +(import-for-syntax chicken) (define-syntax test1 (er-macro-transformer (lambda (x r c) (let* ((t (strip-syntax (cadr x))) - (name (symbol->string (strip-syntax t)))) + (name (symbol->string (strip-syntax t))) + (min (caddr x)) + (max (cadddr x))) (define (conc op) (string->symbol (string-append name op))) `(let ((x (,(conc "vector") 100 101))) - (print x) - (assert (= 100 (,(conc "vector-ref") x 0))) - (assert (,(conc "vector?") x)) - (assert (number-vector? x)) + (assert (eqv? 100 (,(conc "vector-ref") x 0))) + (assert (,(conc "vector?") x)) + (assert (number-vector? x)) (,(conc "vector-set!") x 1 99) - (assert (= 99 (,(conc "vector-ref") x 1))) + (assert (eqv? 99 (,(conc "vector-ref") x 1))) (assert (= 2 (,(conc "vector-length") x))) (assert (let ((result (,(conc "vector->list") x))) - (and (= 100 (car result)) - (= 99 (cadr result)))))))))) + (and (eqv? 100 (car result)) + (eqv? 99 (cadr result)))))))))) + +(test1 u8 0 255) +(test1 u16 0 65535) +(test1 u32 0 4294967295) +(test1 s8 -128 127) +(test1 s16 -32768 32767) +(test1 s32 -2147483648 2147483647) + +(define-syntax test2 + (er-macro-transformer + (lambda (x r c) + (let* ((t (strip-syntax (cadr x))) + (name (symbol->string (strip-syntax t)))) + (define (conc op) + (string->symbol (string-append name op))) + `(let ((x (,(conc "vector") 100 101.0))) + (assert (eqv? 100.0 (,(conc "vector-ref") x 0))) + (assert (eqv? 101.0 (,(conc "vector-ref") x 1))) + (assert (,(conc "vector?") x)) + (assert (number-vector? x)) + (,(conc "vector-set!") x 1 99) + (assert (eqv? 99.0 (,(conc "vector-ref") x 1))) + (assert (= 2 (,(conc "vector-length") x))) + (assert + (let ((result (,(conc "vector->list") x))) + (and (eqv? 100.0 (car result)) + (eqv? 99.0 (cadr result)))))))))) -(test1 u8) -(test1 u16) -(test1 u32) -(test1 s8) -(test1 s16) -(test1 s32) -(test1 f32) -(test1 f64) +(test2 f32) +(test2 f64) ;; Test implicit quoting/self evaluation (assert (equal? #u8(1 2 3) '#u8(1 2 3))) diff --git a/types.db b/types.db index 1a4d949a..334e5cf6 100644 --- a/types.db +++ b/types.db @@ -2020,7 +2020,7 @@ (blob->u32vector/shared (#(procedure #:clean #:enforce) blob->u32vector/shared (blob) (struct u32vector))) (blob->u8vector (#(procedure #:clean #:enforce) blob->u8vector (blob) (struct u8vector))) (blob->u8vector/shared (#(procedure #:clean #:enforce) blob->u8vector/shared (blob) (struct u8vector))) -(f32vector (#(procedure #:clean #:enforce) f32vector (#!rest number) (struct f32vector))) +(f32vector (#(procedure #:clean #:enforce) f32vector (#!rest (or integer float)) (struct f32vector))) (f32vector->blob (#(procedure #:clean #:enforce) f32vector->blob ((struct f32vector)) blob)) (f32vector->blob/shared (#(procedure #:clean #:enforce) f32vector->blob/shared ((struct f32vector)) blob)) (f32vector->list (#(procedure #:clean #:enforce) f32vector->list ((struct f32vector)) (list-of float))) @@ -2029,11 +2029,11 @@ (((struct f32vector)) (##core#inline "C_u_i_32vector_length" #(1)))) (f32vector-ref (#(procedure #:clean #:enforce) f32vector-ref ((struct f32vector) fixnum) float)) -(f32vector-set! (#(procedure #:clean #:enforce) f32vector-set! ((struct f32vector) fixnum number) undefined)) +(f32vector-set! (#(procedure #:clean #:enforce) f32vector-set! ((struct f32vector) fixnum (or integer float)) undefined)) (f32vector? (#(procedure #:pure #:predicate (struct f32vector)) f32vector? (*) boolean)) -(f64vector (#(procedure #:clean #:enforce) f64vector (#!rest number) (struct f64vector))) +(f64vector (#(procedure #:clean #:enforce) f64vector (#!rest (or integer float)) (struct f64vector))) (f64vector->blob (#(procedure #:clean #:enforce) f64vector->blob ((struct f32vector)) blob)) (f64vector->blob/shared (#(procedure #:clean #:enforce) f64vector->blob/shared ((struct f64vector)) blob)) (f64vector->list (#(procedure #:clean #:enforce) f64vector->list ((struct f64vector)) (list-of float))) @@ -2042,28 +2042,28 @@ (((struct f32vector)) (##core#inline "C_u_i_64vector_length" #(1)))) (f64vector-ref (#(procedure #:clean #:enforce) f64vector-ref ((struct f64vector) fixnum) float)) -(f64vector-set! (#(procedure #:clean #:enforce) f64vector-set! ((struct f64vector) fixnum number) undefined)) +(f64vector-set! (#(procedure #:clean #:enforce) f64vector-set! ((struct f64vector) fixnum (or integer float)) undefined)) (f64vector? (#(procedure #:pure #:predicate (struct f64vector)) f64vector? (*) boolean)) -(list->f32vector (#(procedure #:clean #:enforce) list->f32vector ((list-of number)) (struct f32vector))) -(list->f64vector (#(procedure #:clean #:enforce) list->f64vector ((list-of number)) (struct f64vector))) +(list->f32vector (#(procedure #:clean #:enforce) list->f32vector ((list-of (or float integer))) (struct f32vector))) +(list->f64vector (#(procedure #:clean #:enforce) list->f64vector ((list-of (or float integer))) (struct f64vector))) (list->s16vector (#(procedure #:clean #:enforce) list->s16vector ((list-of fixnum)) (struct s16vector))) -(list->s32vector (#(procedure #:clean #:enforce) list->s32vector ((list-of number)) (struct s32vector))) +(list->s32vector (#(procedure #:clean #:enforce) list->s32vector ((list-of integer)) (struct s32vector))) (list->s8vector (#(procedure #:clean #:enforce) list->s8vector ((list-of fixnum)) (struct s8vector))) (list->u16vector (#(procedure #:clean #:enforce) list->u16vector ((list-of fixnum)) (struct u16vector))) -(list->u32vector (#(procedure #:clean #:enforce) list->u32vector ((list-of number)) (struct u32vector))) +(list->u32vector (#(procedure #:clean #:enforce) list->u32vector ((list-of integer)) (struct u32vector))) (list->u8vector (#(procedure #:clean #:enforce) list->u8vector ((list-of fixnum)) (struct u8vector))) -(make-f32vector (#(procedure #:clean #:enforce) make-f32vector (fixnum #!optional * * *) (struct f32vector))) -(make-f64vector (#(procedure #:clean #:enforce) make-f64vector (fixnum #!optional * * *) (struct f64vector))) -(make-s16vector (#(procedure #:clean #:enforce) make-s16vector (fixnum #!optional * * *) (struct s16vector))) -(make-s32vector (#(procedure #:clean #:enforce) make-s32vector (fixnum #!optional * * *) (struct s32vector))) -(make-s8vector (#(procedure #:clean #:enforce) make-s8vector (fixnum #!optional * * *) (struct s8vector))) -(make-u16vector (#(procedure #:clean #:enforce) make-u16vector (fixnum #!optional * * *) (struct u16vector))) -(make-u32vector (#(procedure #:clean #:enforce) make-u32vector (fixnum #!optional * * *) (struct u32vector))) -(make-u8vector (#(procedure #:clean #:enforce) make-u8vector (fixnum #!optional * * *) (struct u8vector))) +(make-f32vector (#(procedure #:clean #:enforce) make-f32vector (fixnum #!optional (or integer float false) boolean boolean) (struct f32vector))) +(make-f64vector (#(procedure #:clean #:enforce) make-f64vector (fixnum #!optional (or integer float false) boolean) (struct f64vector))) +(make-s16vector (#(procedure #:clean #:enforce) make-s16vector (fixnum #!optional (or fixnum false) boolean boolean) (struct s16vector))) +(make-s32vector (#(procedure #:clean #:enforce) make-s32vector (fixnum #!optional (or integer false) boolean boolean) (struct s32vector))) +(make-s8vector (#(procedure #:clean #:enforce) make-s8vector (fixnum #!optional (or fixnum false) boolean boolean) (struct s8vector))) +(make-u16vector (#(procedure #:clean #:enforce) make-u16vector (fixnum #!optional (or fixnum false) boolean boolean) (struct u16vector))) +(make-u32vector (#(procedure #:clean #:enforce) make-u32vector (fixnum #!optional (or integer false) boolean boolean) (struct u32vector))) +(make-u8vector (#(procedure #:clean #:enforce) make-u8vector (fixnum #!optional (or fixnum false) boolean boolean) (struct u8vector))) (read-u8vector (#(procedure #:enforce) read-u8vector (#!optional fixnum input-port) (struct u8vector))) -(read-u8vector! (#(procedure #:enforce) read-u8vector! ((or fixnum false) (struct u8vector) #!optional input-port fixnum) number)) +(read-u8vector! (#(procedure #:enforce) read-u8vector! ((or fixnum false) (struct u8vector) #!optional input-port fixnum) integer)) (release-number-vector (procedure release-number-vector (*) undefined)) (s16vector (#(procedure #:clean #:enforce) s16vector (#!rest fixnum) (struct s16vector))) (s16vector->blob (#(procedure #:clean #:enforce) s16vector->blob ((struct s16vector)) blob)) @@ -2078,16 +2078,16 @@ (s16vector? (#(procedure #:pure #:predicate (struct s16vector)) s16vector? (*) boolean)) -(s32vector (#(procedure #:clean #:enforce) s32vector (#!rest number) (struct s32vector))) +(s32vector (#(procedure #:clean #:enforce) s32vector (#!rest integer) (struct s32vector))) (s32vector->blob (#(procedure #:clean #:enforce) s32vector->blob ((struct 32vector)) blob)) (s32vector->blob/shared (#(procedure #:clean #:enforce) s32vector->blob/shared ((struct s32vector)) blob)) -(s32vector->list (#(procedure #:clean #:enforce) s32vector->list ((struct s32vector)) (list-of number))) +(s32vector->list (#(procedure #:clean #:enforce) s32vector->list ((struct s32vector)) (list-of integer))) (s32vector-length (#(procedure #:clean #:enforce) s32vector-length ((struct s32vector)) fixnum) (((struct s32vector)) (##core#inline "C_u_i_32vector_length" #(1)))) -(s32vector-ref (#(procedure #:clean #:enforce) s32vector-ref ((struct s32vector) fixnum) number)) -(s32vector-set! (#(procedure #:clean #:enforce) s32vector-set! ((struct s32vector) fixnum number) undefined)) +(s32vector-ref (#(procedure #:clean #:enforce) s32vector-ref ((struct s32vector) fixnum) integer)) +(s32vector-set! (#(procedure #:clean #:enforce) s32vector-set! ((struct s32vector) fixnum integer) undefined)) (s32vector? (#(procedure #:pure #:predicate (struct s32vector)) s32vector? (*) boolean)) @@ -2125,16 +2125,16 @@ (u16vector? (#(procedure #:pure #:predicate (struct u16vector)) u16vector? (*) boolean)) -(u32vector (#(procedure #:clean #:enforce) u32vector (#!rest number) (struct u32vector))) +(u32vector (#(procedure #:clean #:enforce) u32vector (#!rest integer) (struct u32vector))) (u32vector->blob (#(procedure #:clean #:enforce) u32vector->blob ((struct u32vector)) blob)) (u32vector->blob/shared (#(procedure #:clean #:enforce) u32vector->blob/shared ((struct u32vector)) blob)) -(u32vector->list (#(procedure #:clean #:enforce) u32vector->list ((struct u32vector)) (list-of number))) +(u32vector->list (#(procedure #:clean #:enforce) u32vector->list ((struct u32vector)) (list-of integer))) (u32vector-length (#(procedure #:clean #:enforce) u32vector-length ((struct u32vector)) fixnum) (((struct u32vector)) (##core#inline "C_u_i_32vector_length" #(1)))) -(u32vector-ref (#(procedure #:clean #:enforce) u32vector-ref ((struct u32vector) fixnum) number)) -(u32vector-set! (#(procedure #:clean #:enforce) u32vector-set! ((struct u32vector) fixnum number) undefined)) +(u32vector-ref (#(procedure #:clean #:enforce) u32vector-ref ((struct u32vector) fixnum) integer)) +(u32vector-set! (#(procedure #:clean #:enforce) u32vector-set! ((struct u32vector) fixnum integer) undefined)) (u32vector? (#(procedure #:pure #:predicate (struct u32vector)) u32vector? (*) boolean))Trap