@@ -120,6 +120,7 @@ class ToIR a where
120build :: (Name, Def) -> Idris (Name, LDecl)
120build :: (Name, Def) -> Idris (Name, LDecl)
121build (n, d)
121build (n, d)
122 = do i <- getIState
122 = do i <- getIState
123 case lookup n (idris_scprims i) of
124 case lookup n (idris_scprims i) of
124 Just (ar, op) ->
125 Just (ar, op) ->
125 let args = map (\x -> MN x "op") [0..] in
126 let args = map (\x -> MN x "op") [0..] in
@@ -169,10 +170,20 @@ instance ToIR (TT Name) where
169 return t' -- TODO
170 return t' -- TODO
170 | (P (DCon t a) n _, args) <- unApply tm
171 | (P (DCon t a) n _, args) <- unApply tm
171 = irCon env t a n args
172 = irCon env t a n args
173+ | (P _ n _, args) <- unApply tm
175+ let unused = case lookupCtxt Nothing n (idris_callgraph i) of
176+ [CGInfo _ _ _ unusedpos] -> unusedpos
178+ args' <- mapM (ir' env) args
179+ return (LApp False (LV (Glob n)) (mkUnused unused 0 args'))
172 | (f, args) <- unApply tm
180 | (f, args) <- unApply tm
173 = do f' <- ir' env f
181 = do f' <- ir' env f
174 args' <- mapM (ir' env) args
182 args' <- mapM (ir' env) args
175 return (LApp False f' args')
183 return (LApp False f' args')
184+ where mkUnused u i [] = []
185+ mkUnused u i (x : xs) | i `elem` u = LNothing : mkUnused u (i + 1) xs
186+ | otherwise = x : mkUnused u (i + 1) xs
176 ir' env (P _ n _) = return $ LV (Glob n)
187 ir' env (P _ n _) = return $ LV (Glob n)
177 ir' env (V i) | i < length env = return $ LV (Glob (env!!i))
188 ir' env (V i) | i < length env = return $ LV (Glob (env!!i))
178 | otherwise = error $ "IR fail " ++ show i ++ " " ++ show tm
189 | otherwise = error $ "IR fail " ++ show i ++ " " ++ show tm
@@ -184,10 +195,11 @@ instance ToIR (TT Name) where
184 = do sc' <- ir' (n : env) sc
195 = do sc' <- ir' (n : env) sc
185 v' <- ir' env v
196 v' <- ir' env v
186 return $ LLet n v' sc'
197 return $ LLet n v' sc'
187− ir' env (Bind _ _ _) = return $ LConst (I 424242)
198+ ir' env (Bind _ _ _) = return $ LNothing
188 ir' env (Proj t i) = do t' <- ir' env t
199 ir' env (Proj t i) = do t' <- ir' env t
189 return $ LProj t' i
200 return $ LProj t' i
190 ir' env (Constant c) = return $ LConst c
201 ir' env (Constant c) = return $ LConst c
202+ ir' env (Set _) = return $ LNothing
191 ir' env _ = return $ LError "Impossible"
203 ir' env _ = return $ LError "Impossible"
193 irCon env t arity n args
205 irCon env t arity n args