@@ -145,7 +145,9 @@ buildDepMap ctx ns = addPostulates $ dfs S.empty M.empty ns
146 -- the variables that arose as function arguments only depend on (n, i)
146 -- the variables that arose as function arguments only depend on (n, i)
147 varMap = M.fromList [(v, S.singleton (fn, Arg i)) | (v,i) <- zip vars [0..]]
147 varMap = M.fromList [(v, S.singleton (fn, Arg i)) | (v,i) <- zip vars [0..]]
148− (vars, sc) = cases_compiletime cdefs -- TODO: or cases_runtime?
148+ (vars, sc) = cases_runtime cdefs
149+ -- we use cases_runtime in order to have case-blocks
150+ -- resolved to top-level functions before our analysis
150 etaExpand :: [Name] -> Term -> Term
152 etaExpand :: [Name] -> Term -> Term
151 etaExpand [] t = t
153 etaExpand [] t = t
@@ -163,8 +165,9 @@ buildDepMap ctx ns = addPostulates $ dfs S.empty M.empty ns
163 getDepsAlt :: Name -> [Name] -> Vars -> Var -> CaseAlt -> Deps
165 getDepsAlt :: Name -> [Name] -> Vars -> Var -> CaseAlt -> Deps
164 getDepsAlt fn es vs var (FnCase n ns sc) = error "an FnCase encountered" -- TODO: what's this?
166 getDepsAlt fn es vs var (FnCase n ns sc) = error "an FnCase encountered" -- TODO: what's this?
165 getDepsAlt fn es vs var (ConstCase c sc) = getDepsSC fn es vs sc
167 getDepsAlt fn es vs var (ConstCase c sc) = getDepsSC fn es vs sc
166− getDepsAlt fn es vs var (SucCase n sc) = getDepsSC fn es vs sc -- deps for S can be hardcoded if needed
167 getDepsAlt fn es vs var (DefaultCase sc) = getDepsSC fn es vs sc
168 getDepsAlt fn es vs var (DefaultCase sc) = getDepsSC fn es vs sc
169+ getDepsAlt fn es vs var (SucCase n sc)
170+ = getDepsSC fn es (M.insert n var vs) sc -- we're not inserting the S-dependency here because it's special-cased
168 getDepsAlt fn es vs var (ConCase n cnt ns sc)
171 getDepsAlt fn es vs var (ConCase n cnt ns sc)
169 = getDepsSC fn es (vs' `M.union` vs) sc -- left-biased union
172 = getDepsSC fn es (vs' `M.union` vs) sc -- left-biased union
@@ -178,6 +181,7 @@ buildDepMap ctx ns = addPostulates $ dfs S.empty M.empty ns
178 -- named variables introduce dependencies as described in `vs'
181 -- named variables introduce dependencies as described in `vs'
179 getDepsTerm vs bs cd (P _ n _)
182 getDepsTerm vs bs cd (P _ n _)
180 | Just var <- M.lookup n vs = M.singleton cd var -- found among local variables
183 | Just var <- M.lookup n vs = M.singleton cd var -- found among local variables
184+ | MN _ _ <- n = error $ "variable " ++ show n ++ " unbound in " ++ show cd
181 | otherwise = M.singleton cd (S.singleton (n, Result)) -- assumed to be a global reference
185 | otherwise = M.singleton cd (S.singleton (n, Result)) -- assumed to be a global reference
183 -- dependencies of de bruijn variables are described in `bs'
187 -- dependencies of de bruijn variables are described in `bs'