~ chicken-core (chicken-5) bc6fe0c6b392ca2066c2d8fde13e1f28c937fc17
commit bc6fe0c6b392ca2066c2d8fde13e1f28c937fc17
Author: LemonBoy <thatlemon@gmail.com>
AuthorDate: Sat Mar 25 00:04:28 2017 +0100
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Sun Mar 26 10:34:52 2017 +1300
Rewrite string->list to be tail-recursive.
This way we allocate one less word per iteration.
A run of chicken-benchmarks shows a (very) small speed-up.
Signed-off-by: Peter Bex <peter@more-magic.net>
Signed-off-by: Evan Hanson <evhan@foldling.org>
diff --git a/library.scm b/library.scm
index 284b6530..8a654a0d 100644
--- a/library.scm
+++ b/library.scm
@@ -639,15 +639,14 @@ EOF
(##sys#check-char c 'make-string)
c ) ) ) )
-(define string->list
- (lambda (s)
- (##sys#check-string s 'string->list)
- (let ((len (##core#inline "C_block_size" s)))
- (let loop ((i 0))
- (if (fx>= i len)
- '()
- (cons (##core#inline "C_subchar" s i)
- (loop (fx+ i 1)) ) ) ) ) ) )
+(define (string->list s)
+ (##sys#check-string s 'string->list)
+ (let ((len (##sys#size s)))
+ (let loop ((i (fx- len 1)) (ls '()))
+ (if (fx< i 0)
+ ls
+ (loop (fx- i 1)
+ (cons (##core#inline "C_subchar" s i) ls))))))
(define ##sys#string->list string->list)
Trap