From: Chris Hanson Date: Wed, 25 Apr 2018 05:55:42 +0000 (-0700) Subject: Add type and constructors for datum-weak hash tables. X-Git-Tag: mit-scheme-pucked-x11-0.3.1~7^2~111 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=025c5cd4ecd855953c5fb34355eabf77af289cea;p=mit-scheme.git Add type and constructors for datum-weak hash tables. --- diff --git a/src/runtime/hash-table.scm b/src/runtime/hash-table.scm index 42c1b01db..482f41a00 100644 --- a/src/runtime/hash-table.scm +++ b/src/runtime/hash-table.scm @@ -1262,8 +1262,10 @@ USA. (define equal-hash-table-type) (define key-ephemeral-eq-hash-table-type) (define key-weak-eq-hash-table-type) +(define datum-weak-eq-hash-table-type) (define key-ephemeral-eqv-hash-table-type) (define key-weak-eqv-hash-table-type) +(define datum-weak-eqv-hash-table-type) (define non-pointer-hash-table-type) (define string-hash-table-type) (define strong-eq-hash-table-type) @@ -1295,10 +1297,14 @@ USA. (make equal-hash-mod equal? #t hash-table-entry-type:strong)) (set! key-weak-eq-hash-table-type ;Open-coded (open-type! eq-hash-mod eq? #t hash-table-entry-type:key-weak)) - (set! key-weak-eqv-hash-table-type - (make eqv-hash-mod eqv? #t hash-table-entry-type:key-weak)) + (set! datum-weak-eq-hash-table-type ;Open-coded + (open-type! eq-hash-mod eq? #t hash-table-entry-type:datum-weak)) (set! key-ephemeral-eqv-hash-table-type (make eqv-hash-mod eqv? #t hash-table-entry-type:key-ephemeral)) + (set! key-weak-eqv-hash-table-type + (make eqv-hash-mod eqv? #t hash-table-entry-type:key-weak)) + (set! datum-weak-eqv-hash-table-type + (make eqv-hash-mod eqv? #t hash-table-entry-type:datum-weak)) (set! non-pointer-hash-table-type ;Open-coded (open-type! eq-hash-mod eq? #f hash-table-entry-type:strong)) (set! string-hash-table-type @@ -1308,12 +1314,14 @@ USA. (set! strong-eqv-hash-table-type (make eqv-hash-mod eqv? #t hash-table-entry-type:strong))) unspecific)) - + (define make-equal-hash-table) (define make-key-ephemeral-eq-hash-table) (define make-key-weak-eq-hash-table) +(define make-datum-weak-eq-hash-table) (define make-key-ephemeral-eqv-hash-table) (define make-key-weak-eqv-hash-table) +(define make-datum-weak-eqv-hash-table) (define make-non-pointer-hash-table) (define make-string-hash-table) (define make-strong-eq-hash-table) @@ -1329,8 +1337,10 @@ USA. ;; This is done above. ;; (init make-key-ephemeral-eq-hash-table key-ephemeral-eq-hash-table-type) (init make-key-weak-eq-hash-table key-weak-eq-hash-table-type) + (init make-datum-weak-eq-hash-table datum-weak-eq-hash-table-type) (init make-key-ephemeral-eqv-hash-table key-ephemeral-eqv-hash-table-type) (init make-key-weak-eqv-hash-table key-weak-eqv-hash-table-type) + (init make-datum-weak-eqv-hash-table datum-weak-eqv-hash-table-type) (init make-non-pointer-hash-table non-pointer-hash-table-type) (init make-string-hash-table string-hash-table-type) (init make-strong-eq-hash-table strong-eq-hash-table-type) diff --git a/src/runtime/runtime.pkg b/src/runtime/runtime.pkg index 433724da4..ffac4dc59 100644 --- a/src/runtime/runtime.pkg +++ b/src/runtime/runtime.pkg @@ -2408,6 +2408,8 @@ USA. (weak-eq-hash-table-type key-weak-eq-hash-table-type) (weak-eqv-hash-table-type key-weak-eqv-hash-table-type) alist->hash-table ;SRFI-69 + datum-weak-eq-hash-table-type + datum-weak-eqv-hash-table-type eq-hash eq-hash-mod equal-hash @@ -2462,6 +2464,8 @@ USA. key-ephemeral-eqv-hash-table-type key-weak-eq-hash-table-type key-weak-eqv-hash-table-type + make-datum-weak-eq-hash-table + make-datum-weak-eqv-hash-table make-equal-hash-table make-hash-table make-hash-table*