File tree Expand file tree Collapse file tree 6 files changed +500
-27
lines changed Expand file tree Collapse file tree 6 files changed +500
-27
lines changed Original file line number Diff line number Diff line change 667667 ht))
668668
669669(define (hash-table-prune! proc ht )
670+ (define original-size (hash-table-size ht))
670671 (unless (hash-table-mutable? ht)
671672 (assertion-violation 'hash-table-prune!
672673 " hash table is immutable"
673674 ht))
674675 (let loop ((cur (hash-table-cursor-first ht)) (n-deleted 0 ))
675676 (if (hash-table-cursor-at-end? ht cur)
676677 (begin
677- (hash-table-size-set! ht (- (hash-table-size ht) n-deleted))
678678 (hash-table-prune-dead-entries-at-end! ht)
679- (when (> (- (hash-table-next-entry ht) (hash-table- size ht) )
679+ (when (> (- (hash-table-next-entry ht) original- size)
680680 (* 1/3 (hash-table-size ht)))
681681 (hash-table-prune-dead-entries! ht #f ))
682682 n-deleted)
683683 (let-values (((k v) (hash-table-cursor-key+value ht cur)))
684684 (if (and (proc k v)
685685 (hash-table-delete-one! ht k))
686- (loop (hash-table-cursor-next ht cur) (+ n-deleted 1 ))
686+ (begin
687+ (hash-table-size-set! ht (- (hash-table-size ht) 1 ))
688+ (loop (hash-table-cursor-next ht cur) (+ n-deleted 1 )))
687689 (loop (hash-table-cursor-next ht cur) n-deleted))))))
688690
689691(define (hash-table-copy ht mutable? )
711713 (hash-table-for-each
712714 (lambda (k v )
713715 (unless (hash-table-contains? ht_1 k)
714- (hash-table-set! ht_2 k v)))
716+ (hash-table-set! ht_1 k v)))
715717 ht_2)
716718 ht_1)
717719
Original file line number Diff line number Diff line change 6363 (let ((out (make-u8vector len)))
6464 (let loop ((idx 0 ))
6565 (when (< idx len)
66- (u8vector-set! out idx (u8vector-ref sa idx))))))
66+ (u8vector-set! out idx (u8vector-ref sa idx))
67+ (loop (+ idx 1 ))))
68+ out))
6769 ((u16vector? sa)
6870 (let ((out (make-u16vector len)))
6971 (let loop ((idx 0 ))
7072 (when (< idx len)
71- (u16vector-set! out idx (u16vector-ref sa idx))))))
73+ (u16vector-set! out idx (u16vector-ref sa idx))
74+ (loop (+ idx 1 ))))
75+ out))
7276 ((u32vector? sa)
7377 (let ((out (make-u32vector len)))
7478 (let loop ((idx 0 ))
7579 (when (< idx len)
76- (u32vector-set! out idx (u32vector-ref sa idx))))))
80+ (u32vector-set! out idx (u32vector-ref sa idx))
81+ (loop (+ idx 1 ))))
82+ out))
7783 ((u64vector? sa)
7884 (let ((out (make-u64vector len)))
7985 (let loop ((idx 0 ))
8086 (when (< idx len)
81- (u64vector-set! out idx (u64vector-ref sa idx))))))))
87+ (u64vector-set! out idx (u64vector-ref sa idx))
88+ (loop (+ idx 1 ))))
89+ out))))
8290
8391(define (compact-array-length sa )
8492 (cond ((u8vector? sa)
Original file line number Diff line number Diff line change 22 (rnrs r5rs)
33 (chibi test)
44 (only (srfi :1) list-tabulate)
5+ (srfi :6)
56 (srfi :27)
67 (srfi :128)
78 (srfi :250)
Original file line number Diff line number Diff line change 22 (rnrs r5rs)
33 (chibi test)
44 (only (srfi :1) list-tabulate)
5+ (srfi :6)
56 (srfi :27)
67 (srfi :128)
78 (srfi :250)
Original file line number Diff line number Diff line change 11(import (scheme base)
22 (scheme char)
3+ (scheme write)
34 (chibi test)
45 (only (srfi 1 ) list-tabulate)
56 (srfi 27 )
1011(define-syntax assert
1112 (syntax-rules ()
1213 ((_ what) (unless what (error " assertion failed" )))))
14+ (define (assertion-violation who msg . rest )
15+ (apply error msg rest))
1316(define assertion-violation? error-object?)
1417
1518(test-begin " SRFI 250" )
You can’t perform that action at this time.
0 commit comments