X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/1cbe917465857acd366e4058d1f71c5653720b17..8cbb96323335d1a2b42a9daac94a9d538ab93536:/src/reduce.sml diff --git a/src/reduce.sml b/src/reduce.sml index ab6dafa..5d7a1b9 100644 --- a/src/reduce.sml +++ b/src/reduce.sml @@ -36,7 +36,7 @@ fun freeIn x (b, _) = | ESkip => false | ESet (_, e) => freeIn x e - | EGet (x', _, b') => x <> x' andalso freeIn x b' + | EGet (x', _, _, b') => x <> x' andalso freeIn x b' | ESeq es => List.exists (freeIn x) es | ELocal (e1, e2) => freeIn x e1 orelse freeIn x e2 | EWith (e1, e2) => freeIn x e1 orelse freeIn x e2 @@ -80,17 +80,17 @@ fun subst x e (bAll as (b, loc)) = | ESkip => bAll | ESet (v, b) => (ESet (v, subst x e b), loc) - | EGet (x', v, b') => + | EGet (x', topt, v, b') => if x = x' then bAll else if freeIn x' e then let val x'' = freshVar () in - (EGet (x'', v, subst x e (subst x' (EVar x'', loc) b')), loc) + (EGet (x'', topt, v, subst x e (subst x' (EVar x'', loc) b')), loc) end else - (EGet (x', v, subst x e b'), loc) + (EGet (x', topt, v, subst x e b'), loc) | ESeq es => (ESeq (map (subst x e) es), loc) | ELocal (b1, b2) => (ELocal (subst x e b1, subst x e b2), loc) | EWith (b1, b2) => (EWith (subst x e b1, subst x e b2), loc) @@ -155,7 +155,7 @@ fun reduceExp G (eAll as (e, loc)) = | ESkip => eAll | ESet (v, b) => (ESet (v, reduceExp G b), loc) - | EGet (x, v, b) => (EGet (x, v, reduceExp G b), loc) + | EGet (x, topt, v, b) => (EGet (x, topt, v, reduceExp G b), loc) | ESeq es => (ESeq (map (reduceExp G) es), loc) | ELocal (e1, e2) => (ELocal (reduceExp G e1, reduceExp G e2), loc) | EWith (e1, e2) =>