diff options
Diffstat (limited to 'module/system/foreign.scm')
-rw-r--r-- | module/system/foreign.scm | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/module/system/foreign.scm b/module/system/foreign.scm index fe068a471..4fb9f6628 100644 --- a/module/system/foreign.scm +++ b/module/system/foreign.scm @@ -290,10 +290,12 @@ which does the reverse. PRINT must name a user-defined object printer." (define wrap ;; Use a weak hash table to preserve pointer identity, i.e., ;; PTR1 == PTR2 <-> (eq? (wrap PTR1) (wrap PTR2)). - (let ((ptr->obj (make-weak-value-hash-table 3000))) + (let ((ptr->obj (make-weak-value-hash-table + #:hash hash #:equal? equal? + #:initial-size 3000))) (lambda (ptr) - (or (hash-ref ptr->obj ptr) + (or (weak-value-hash-table-ref ptr->obj ptr) (let ((o (%wrap ptr))) - (hash-set! ptr->obj ptr o) + (weak-value-hash-table-set! ptr->obj ptr o) o))))) (set-record-type-printer! type-name print))))))) |