prop:evt: support chaperone when extracting field

Thanks to Sam for noticing this problem.
This commit is contained in:
Matthew Flatt 2014-07-15 07:59:59 +01:00
parent a027e1445f
commit fed14e1ce1
2 changed files with 13 additions and 1 deletions

View File

@ -1258,6 +1258,18 @@
(set! checked? #t) (set! checked? #t)
v))) v)))
(test #t values checked?)) (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 ;; channel chaperones

View File

@ -1521,7 +1521,7 @@ static int evt_struct_is_ready(Scheme_Object *o, Scheme_Schedule_Info *sinfo)
} }
if (SCHEME_INTP(v)) 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)) { if (scheme_is_evt(v)) {
scheme_set_sync_target(sinfo, v, NULL, NULL, 0, 1, NULL); scheme_set_sync_target(sinfo, v, NULL, NULL, 0, 1, NULL);