X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/1824f573f7f8720514af1dc94d7cfb1de5b15fef..ef5ad69ab6c5c1d749591a6955dad38d783ac0a4:/src/eval.sml diff --git a/src/eval.sml b/src/eval.sml index 6cbeca7..08fd7f5 100644 --- a/src/eval.sml +++ b/src/eval.sml @@ -60,7 +60,12 @@ fun exec' evs (eAll as (e, _)) = case e of ESkip => SM.empty | ESet (ev, e) => SM.insert (SM.empty, ev, e) - | EGet (x, ev, e) => exec' evs (Reduce.subst x (lookup (evs, ev)) e) + | EGet (x, _, ev, e) => + let + val e' = Reduce.subst x (lookup (evs, ev)) e + in + exec' evs (Reduce.reduceExp Env.empty e') + end | ESeq es => let val (new, _) = @@ -77,9 +82,8 @@ fun exec' evs (eAll as (e, _)) = | ELocal (e1, e2) => let val evs' = exec' evs e1 - val evs'' = exec' (conjoin (evs, evs')) e2 in - conjoin (evs, evs'') + exec' (conjoin (evs, evs')) e2 end | EWith (e1, e2) => let @@ -103,7 +107,7 @@ fun exec' evs (eAll as (e, _)) = in case Env.action prim of NONE => raise Fail "Unbound primitive action" - | SOME action => action (evs, args) + | SOME action => action (evs, List.map (Reduce.reduceExp Env.empty) args) end fun exec evs e = @@ -114,4 +118,6 @@ fun exec evs e = Env.post () end +val exec' = fn evs => fn e => conjoin (evs, exec' evs e) + end