From ef4e450af740d798f9e6f3a0ad00d2e460630b85 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 23 May 2024 10:47:36 +0900 Subject: [PATCH] Fix element initialization for char arrays. Closes #957. --- lib/srfi/231/test.sld | 9 +++++++++ lib/srfi/231/transforms.scm | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/srfi/231/test.sld b/lib/srfi/231/test.sld index 66862995..94962089 100644 --- a/lib/srfi/231/test.sld +++ b/lib/srfi/231/test.sld @@ -1303,6 +1303,15 @@ (test-error (array-packed? (make-array (make-interval '#(1 2)) list list))) + (test #\a + (let ((a (make-specialized-array (make-interval '#()) + char-storage-class))) + (array-set! a #\a) + (array-ref a))) + (test #\a + (array-ref (make-specialized-array (make-interval '#()) + char-storage-class #\a))) + ;; all these are true, we'll have to see how to screw it up later. ;; (do ((i 0 (+ i 1))) ;; ((= i tests)) diff --git a/lib/srfi/231/transforms.scm b/lib/srfi/231/transforms.scm index 590dc298..1710880e 100644 --- a/lib/srfi/231/transforms.scm +++ b/lib/srfi/231/transforms.scm @@ -61,7 +61,10 @@ (define-storage-class char-storage-class (lambda (vec i) (integer->char (u32vector-ref vec i))) (lambda (vec i ch) (u32vector-set! vec i (char->integer ch))) - char? make-u32vector u32vector-length 0) + char? + (lambda (len init) (make-u32vector len (char->integer init))) + u32vector-length + #\space) ;; TODO: implement (define f8-storage-class #f)