From 22363636965d2268340e797dfd22f63fc1e5ee58 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 28 Feb 2013 10:03:41 -0700 Subject: [PATCH] fix bug in hashing shortcut for transparency --- collects/tests/racket/basic.rktl | 10 ++++++++++ src/racket/src/struct.c | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/collects/tests/racket/basic.rktl b/collects/tests/racket/basic.rktl index 39cfd2d63f..76571fcc5d 100644 --- a/collects/tests/racket/basic.rktl +++ b/collects/tests/racket/basic.rktl @@ -2562,6 +2562,16 @@ (equal-hash-code ht) (equal-secondary-hash-code ht)) +;; Check that an equal hash code on an +;; mutable, opaque structure does not +;; see mutation. +(let () + (struct a (x [y #:mutable])) + (define an-a (a 1 2)) + (define v (equal-hash-code an-a)) + (set-a-y! an-a 8) + (test v equal-hash-code an-a)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Misc diff --git a/src/racket/src/struct.c b/src/racket/src/struct.c index b085de8a1d..ca985d53ba 100644 --- a/src/racket/src/struct.c +++ b/src/racket/src/struct.c @@ -3061,7 +3061,7 @@ int scheme_struct_is_transparent(Scheme_Object *s) stype = ((Scheme_Structure *)s)->stype; - for (p = stype->name_pos; p--; ) { + for (p = stype->name_pos + 1; p--; ) { if (SCHEME_TRUEP(stype->parent_types[p]->inspector)) return 0; }