X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/e47271a147faaa62f43929ab16b3a668b87cd89e..167cffff3b3a976d4bf454808d3054fdb323b1a1:/src/eval.sml diff --git a/src/eval.sml b/src/eval.sml index 0cabf34..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, _) = @@ -102,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 = @@ -113,4 +118,6 @@ fun exec evs e = Env.post () end +val exec' = fn evs => fn e => conjoin (evs, exec' evs e) + end