on master help sign in
Fix lambda lifting bug with uniqueness

Need to treat variables which are to be overwritten as 'used' when making lifted function

commiteed5b88d7c4b0981a6b56581a6ab90db1404a3ac authorEdwin Brady <ecb10@st-andrews.ac.uk> dateWed 18 Feb 2015, 01:08 (12 years ago) parent5f3e853
1 file changed+4−1
src/IRTS/Lang.hs+4−1
src/IRTS/Lang.hs+4−1
@@ -281,7 +281,10 @@ usedIn env (LLazyExp e) = usedIn env e
281281usedIn env (LForce e) = usedIn env e
282282usedIn env (LLet n v e) = usedIn env v ++ usedIn (env \\ [n]) e
283283usedIn env (LLam ns e) = usedIn (env \\ ns) e
284−usedIn env (LCon loc i n args) = concatMap (usedIn env) args
284+usedIn env (LCon v i n args) = let rest = concatMap (usedIn env) args in
285+ case v of
286+ Nothing -> rest
287+ Just (Glob n) -> usedArg env n ++ rest
285288usedIn env (LProj t i) = usedIn env t
286289usedIn env (LCase up e alts) = usedIn env e ++ concatMap (usedInA env) alts
287290 where usedInA env (LConCase i n ns e) = usedIn env e