Mercurial > urweb
diff src/monoize.sml @ 1240:beb67ff4c8a0
'also' policies and policy reduction; calendar in good shape
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Thu, 15 Apr 2010 10:00:30 -0400 |
parents | a2cd6664f57f |
children | 459a334345ae |
line wrap: on
line diff
--- a/src/monoize.sml Thu Apr 15 08:48:41 2010 -0400 +++ b/src/monoize.sml Thu Apr 15 10:00:30 2010 -0400 @@ -3742,25 +3742,39 @@ end | L.DPolicy e => let - val (e, make) = + fun policies (e, fm) = case #1 e of - L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "sendClient"), _), _), _), _), _), e) => - (e, L'.PolClient) - | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayInsert"), _), _), _), _), _), e) => - (e, L'.PolInsert) - | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayDelete"), _), _), _), _), _), e) => - (e, L'.PolDelete) - | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayUpdate"), _), _), _), _), _), e) => - (e, L'.PolUpdate) - | L.EFfiApp ("Basis", "sendOwnIds", [e]) => - (e, L'.PolSequence) - | _ => (poly (); (e, L'.PolClient)) + L.EFfiApp ("Basis", "also", [e1, e2]) => + let + val (ps1, fm) = policies (e1, fm) + val (ps2, fm) = policies (e2, fm) + in + (ps1 @ ps2, fm) + end + | _ => + let + val (e, make) = + case #1 e of + L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "sendClient"), _), _), _), _), _), e) => + (e, L'.PolClient) + | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayInsert"), _), _), _), _), _), e) => + (e, L'.PolInsert) + | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayDelete"), _), _), _), _), _), e) => + (e, L'.PolDelete) + | L.EApp ((L.ECApp ((L.ECApp ((L.EFfi ("Basis", "mayUpdate"), _), _), _), _), _), e) => + (e, L'.PolUpdate) + | L.EFfiApp ("Basis", "sendOwnIds", [e]) => + (e, L'.PolSequence) + | _ => (poly (); (e, L'.PolClient)) - val (e, fm) = monoExp (env, St.empty, fm) e + val (e, fm) = monoExp (env, St.empty, fm) e + in + ([(L'.DPolicy (make e), loc)], fm) + end + + val (ps, fm) = policies (e, fm) in - SOME (env, - fm, - [(L'.DPolicy (make e), loc)]) + SOME (env, fm, ps) end end