~ chicken-core (master) 6deadf39387b54591ed520fddd7759db570d67c6
commit 6deadf39387b54591ed520fddd7759db570d67c6
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Mar 21 15:58:14 2026 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sat Mar 21 15:58:14 2026 +0100
fix vector->string
Original patch contributed by Daniel Ziltener, with some corrections.
diff --git a/library.scm b/library.scm
index 06a5f9b7..3f06ab74 100644
--- a/library.scm
+++ b/library.scm
@@ -7815,24 +7815,24 @@ static C_word C_curdir(C_word buf, C_word size) {
(s->v s (or start 0) (string-length s))))))
(set! scheme#vector->string
- (lambda (v #!optional start end)
- (let ((v->s (lambda (v start end)
- (##sys#check-vector v 'vector->string)
- (let* ((len (##sys#size v)))
- (##sys#check-range/including start 0 end 'vector->string)
- (##sys#check-range/including end start len 'vector->string)
- (let ((s (##sys#make-bytevector (fx* 4 (fx- end start)))))
- (let loop ((ti 0)
- (fi start))
- (if (fx= fi end)
- (##sys#buffer->string s 0 ti)
- (let ((c (##sys#slot v fi)))
- (##sys#check-char c 'vector->string)
- (loop (fx+ ti (##core#inline "C_utf_insert" s ti c))
- (fx+ fi 1))))))))))
- (if end
- (v->s v start end)
- (v->s v (or start 0) (##sys#size v))))))
+ (lambda (v #!optional start end)
+ (##sys#check-vector v 'vector->string)
+ (let ((v->s (lambda (v start end)
+ (let ((len (##sys#size v)))
+ (##sys#check-range/including start 0 end 'vector->string)
+ (##sys#check-range/including end start len 'vector->string)
+ (let ((bv (##sys#make-bytevector (fx* (fx- end start) 4))))
+ (let loop ((i 0)
+ (p start))
+ (if (fx= p end)
+ (##sys#buffer->string bv 0 i)
+ (let ((c (##sys#slot v p)))
+ (##sys#check-char c 'vector->string)
+ (loop (##core#inline "C_utf_insert" bv i c)
+ (fx+ p 1))))))))))
+ (if end
+ (v->s v start end)
+ (v->s v (or start 0) (##sys#size v))))))
(set! scheme#string-map
(lambda (proc str . more)
Trap