From fed14e1ce16ae24a99701012f5d26f1078bbab5e Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 15 Jul 2014 07:59:59 +0100 Subject: [PATCH] prop:evt: support chaperone when extracting field Thanks to Sam for noticing this problem. --- .../racket-test/tests/racket/chaperone.rktl | 12 ++++++++++++ racket/src/racket/src/struct.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl b/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl index 7ac468e398..df57b03764 100644 --- a/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl +++ b/pkgs/racket-pkgs/racket-test/tests/racket/chaperone.rktl @@ -1258,6 +1258,18 @@ (set! checked? #t) v))) (test #t values checked?)) +(let () + (struct e (orig) + #:property prop:evt 0) + (define an-e (e always-evt)) + (define checked? #f) + (test #t evt? an-e) + (sync (chaperone-struct an-e + e-orig + (lambda (self v) + (set! checked? #t) + v))) + (test #t values checked?)) ;; ---------------------------------------- ;; channel chaperones diff --git a/racket/src/racket/src/struct.c b/racket/src/racket/src/struct.c index ccb4c745ca..1e89f8c727 100644 --- a/racket/src/racket/src/struct.c +++ b/racket/src/racket/src/struct.c @@ -1521,7 +1521,7 @@ static int evt_struct_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo) } if (SCHEME_INTP(v)) - v = ((Scheme_Structure *)o)->slots[SCHEME_INT_VAL(v)]; + v = scheme_struct_ref(o, SCHEME_INT_VAL(v)); if (scheme_is_evt(v)) { scheme_set_sync_target(sinfo, v, NULL, NULL, 0, 1, NULL);