Hi,

I always assumed that (make-hash-table eq?) would create a hash table
usable with arbitrary chicken objects as keys.

That is especially structures like objects created via define-record
should be valid as keys.  That is: referencing the table using the very
same object (comparing eq? to the key object of the insert operation)
will succeed.

However this fails for me.  At least after the key object was mutated
between insert and reference time.

See attached test case.

Am I trying something illegal here?

Thanks

/Jörg
(use srfi-69)

(define objtbl (make-hash-table eq?))

(define (register! obj arg)
  (hash-table-update! objtbl obj identity (lambda () (list obj arg))))

(assert (eq? (register! 1 1) (register! 1 2)))

(define-record foo bar)

(define o1 (make-foo (list 23)))

(define r1 (register! o1 1))

(assert (eq? r1 (register! o1 2)))
(assert (eq? r1 (register! o1 3)))
(foo-bar-set! o1 (list 42))
(assert (eq? r1 (register! o1 4)))
_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to