Change procedures that convert hash tables to lists so that they don't
authorChris Hanson <org/chris-hanson/cph>
Wed, 8 Dec 1993 21:13:14 +0000 (21:13 +0000)
committerChris Hanson <org/chris-hanson/cph>
Wed, 8 Dec 1993 21:13:14 +0000 (21:13 +0000)
include invalid entries in the result.

v7/src/runtime/hashtb.scm

index 317ebb1f4561791b18404827779113576f64c7bd..45cab699bf55e689d9b323a6cddbfdb6a9a9aa9f 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: hashtb.scm,v 1.16 1993/10/20 22:05:02 cph Exp $
+$Id: hashtb.scm,v 1.17 1993/12/08 21:13:14 cph Exp $
 
 Copyright (c) 1990-93 Massachusetts Institute of Technology
 
@@ -336,7 +336,17 @@ MIT in each case. |#
   (table->list table (table-entry-datum table)))
 
 (define (table->list table entry->element)
-  (let ((buckets (table-buckets table)))
+  (let ((buckets (table-buckets table))
+       (cons-element
+        (let ((entry-valid? (table-entry-valid? table)))
+          (if (eq? strong-valid? entry-valid?)
+              (lambda (entry result)
+                (cons (entry->element entry) result))
+              (lambda (entry result)
+                (let ((element (entry->element entry)))
+                  (if (entry-valid? entry)
+                      (cons element result)
+                      result)))))))
     (let ((n-buckets (vector-length buckets)))
       (let loop ((n 0) (result '()))
        (if (fix:< n n-buckets)
@@ -345,7 +355,7 @@ MIT in each case. |#
                    (if (null? entries)
                        result
                        (loop (cdr entries)
-                             (cons (entry->element (car entries)) result)))))
+                             (cons-element (car entries) result)))))
            result)))))
 \f
 ;;;; Parameters