# HG changeset patch # User Adam Chlipala # Date 1300455984 14400 # Node ID b6df00ed536ce2edf6f22c7375b7803fb619813b # Parent 493e087f5479a4de492840a234de99cf0450ccdb Fix soundness bug in Effectize, which lead to missing effects in event handlers diff -r 493e087f5479 -r b6df00ed536c src/effectize.sml --- a/src/effectize.sml Fri Mar 18 09:12:55 2011 -0400 +++ b/src/effectize.sml Fri Mar 18 09:46:24 2011 -0400 @@ -97,13 +97,13 @@ case #1 d of DVal (x, n, t, e, s) => let - val e = dejs e + val e' = dejs e in - (d, (if couldWrite writers e then + (d, (if couldWrite writers e' then IM.insert (writers, n, (#2 d, s)) else writers, - if couldReadCookie readers e then + if couldReadCookie readers e' then IM.insert (readers, n, (#2 d, s)) else readers, @@ -117,16 +117,16 @@ fun oneRound evs = foldl (fn ((_, n, _, e, s), (changed, (writers, readers, pushers))) => let - val e = dejs e + val e' = dejs e val (changed, writers) = - if couldWrite writers e andalso not (IM.inDomain (writers, n)) then + if couldWrite writers e' andalso not (IM.inDomain (writers, n)) then (true, IM.insert (writers, n, (#2 d, s))) else (changed, writers) val (changed, readers) = - if couldReadCookie readers e andalso not (IM.inDomain (readers, n)) then + if couldReadCookie readers e' andalso not (IM.inDomain (readers, n)) then (true, IM.insert (readers, n, (#2 d, s))) else (changed, readers)