zilch/aux/r7rs.patch
2024-10-04 15:08:26 +00:00

49 lines
2.2 KiB
Diff

diff --git a/scheme.base.scm b/scheme.base.scm
index 763e50c..35e90a0 100644
--- a/scheme.base.scm
+++ b/scheme.base.scm
@@ -43,7 +43,7 @@
(import (rename (only srfi-4 make-u8vector subu8vector u8vector
u8vector? u8vector-length u8vector-ref
u8vector-set! read-u8vector read-u8vector!
- write-u8vector)
+ write-u8vector u8vector->blob/shared)
(u8vector bytevector)
(u8vector-length bytevector-length)
(u8vector-ref bytevector-u8-ref)
@@ -51,7 +51,8 @@
(u8vector? bytevector?)
(make-u8vector make-bytevector)
(read-u8vector read-bytevector)
- (write-u8vector write-bytevector)))
+ (write-u8vector write-bytevector)
+ (u8vector->blob/shared %u8vector->blob/shared)))
;; u8-ready?
(import (rename (only scheme char-ready?)
@@ -597,10 +598,8 @@
(##sys#check-range start 0 (fx+ end 1) 'utf8->string)
(##sys#check-range end start (fx+ len 1) 'utf8->string)
(let ((s (##sys#make-string (fx- end start))))
- (do ((si 0 (fx+ si 1))
- (vi start (fx+ vi 1)))
- ((fx= vi end) s)
- (##sys#setbyte s si (bytevector-u8-ref bv vi))))))))
+ (##sys#copy-bytes (%u8vector->blob/shared bv) s start 0 (fx- end start))
+ s)))))
(case-lambda
((bv) (bv->s bv 0))
((bv start) (bv->s bv start))
@@ -614,10 +613,8 @@
(##sys#check-range start 0 (fx+ end 1) 'string->utf8)
(##sys#check-range end start (fx+ len 1) 'string->utf8)
(let ((bv (make-bytevector (fx- end start))))
- (do ((vi 0 (fx+ vi 1))
- (si start (fx+ si 1)))
- ((fx= si end) bv)
- (bytevector-u8-set! bv vi (##sys#byte s si))))))))
+ (##sys#copy-bytes s (%u8vector->blob/shared bv) start 0 (fx- end start))
+ bv)))))
(case-lambda
((s) (s->bv s 0))
((s start) (s->bv s start))