~ chicken-core (chicken-5) 04d9ec68159151ab9800dd04cf35bf63dc3de7da


commit 04d9ec68159151ab9800dd04cf35bf63dc3de7da
Author:     Kristian Lein-Mathisen <kristianlein@gmail.com>
AuthorDate: Thu Apr 13 14:15:07 2017 +0200
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Wed Apr 19 11:09:32 2017 +1200

    Use s8vector-set! for the s8vector-ref's setter
    
    This fixes a bug where u8vector-set! was used instead.
    
    Signed-off-by: Peter Bex <peter@more-magic.net>
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/NEWS b/NEWS
index a107ebb0..c61cf58f 100644
--- a/NEWS
+++ b/NEWS
@@ -73,6 +73,8 @@
     interrupted by a signal, we now retry (thanks to Joerg Wittenberger).
   - char-ready? on string ports now also returns #t at EOF, as per R5RS;
     in other words, it always returns #t (thanks to Moritz Heidkamp)
+  - Unit srfi-4: Fixed typo that broke SRFI-17 generalised set! syntax
+    on s8vectors (thanks to Kristian Lein-Mathisen).
 
 - Build system
   - Fixed broken compilation on NetBSD, due to missing _NETBSD_SOURCE.
diff --git a/srfi-4.scm b/srfi-4.scm
index 0371b9e6..3d532d80 100644
--- a/srfi-4.scm
+++ b/srfi-4.scm
@@ -257,7 +257,7 @@ EOF
      (let ((len (##core#inline "C_u_i_s8vector_length" x)))
        (check-range i 0 len 's8vector-ref)
        (##core#inline "C_u_i_s8vector_ref" x i)))
-   u8vector-set!
+   s8vector-set!
    "(s8vector-ref v i)"))
 
 (define u16vector-ref
diff --git a/tests/srfi-4-tests.scm b/tests/srfi-4-tests.scm
index b6dcebc4..5f02ae55 100644
--- a/tests/srfi-4-tests.scm
+++ b/tests/srfi-4-tests.scm
@@ -17,12 +17,17 @@
 	  (assert (eqv? 100 (,(conc "vector-ref") x 0)))
 	  (assert (,(conc "vector?") x))
 	  (assert (number-vector? x))
+	  ;; Test direct setter and ref
 	  (,(conc "vector-set!") x 1 99)
 	  (assert (eqv? 99 (,(conc "vector-ref") x 1)))
+	  ;; Test SRFI-17 generalised set! and ref
+	  (set! (,(conc "vector-ref") x 0) 127)
+	  (assert (eqv? 127 (,(conc "vector-ref") x 0)))
+	  ;; Ensure length is okay
 	  (assert (= 2 (,(conc "vector-length") x)))
 	  (assert
 	   (let ((result (,(conc "vector->list") x)))
-	     (and (eqv? 100 (car result))
+	     (and (eqv? 127 (car result))
 		  (eqv? 99 (cadr result))))))))))
 
 (test1 u8 0 255)
Trap