comparison src/effectize.sml @ 765:a28982de5645

Successfully influenced effectful-ness status of FFI func
author Adam Chlipala <adamc@hcoop.net>
date Sat, 02 May 2009 11:27:26 -0400
parents 5ccb67665d05
children a44daa674810
comparison
equal deleted inserted replaced
764:7f653298dd66 765:a28982de5645
35 structure SS = BinarySetFn(struct 35 structure SS = BinarySetFn(struct
36 type ord_key = string 36 type ord_key = string
37 val compare = String.compare 37 val compare = String.compare
38 end) 38 end)
39 39
40 val effectful = ["dml", "nextval", "send", "setCookie"] 40 fun effectful x = Settings.isEffectful x andalso not (Settings.isClientOnly x)
41 val effectful = SS.addList (SS.empty, effectful)
42 41
43 fun effectize file = 42 fun effectize file =
44 let 43 let
45 fun exp evs e = 44 fun exp evs e =
46 case e of 45 case e of
47 EFfi ("Basis", s) => SS.member (effectful, s) 46 EFfi f => effectful f
48 | EFfiApp ("Basis", s, _) => SS.member (effectful, s) 47 | EFfiApp (m, x, _) => effectful (m, x)
49 | ENamed n => IM.inDomain (evs, n) 48 | ENamed n => IM.inDomain (evs, n)
50 | EServerCall (n, _, _, _) => IM.inDomain (evs, n) 49 | EServerCall (n, _, _, _) => IM.inDomain (evs, n)
51 | _ => false 50 | _ => false
52 51
53 fun couldWrite evs = U.Exp.exists {kind = fn _ => false, 52 fun couldWrite evs = U.Exp.exists {kind = fn _ => false,