@@ -529,6 +529,7 @@ data Def = Function Type Term
529529data CaseDefs = CaseDefs {
530530 cases_totcheck :: ([Name], SC),
531531 cases_compiletime :: ([Name], SC),
532+ cases_inlined :: ([Name], SC),
532533 cases_runtime :: ([Name], SC)
533534 }
534535
@@ -676,31 +677,37 @@ addCasedef :: Name -> CaseInfo -> Bool -> Bool -> Bool -> Bool ->
676677 [Either Term (Term, Term)] ->
677678 [([Name], Term, Term)] -> -- totality
678679 [([Name], Term, Term)] -> -- compile time
680+ [([Name], Term, Term)] -> -- inlined
679681 [([Name], Term, Term)] -> -- run time
680682 Type -> Context -> Context
681683addCasedef n ci@(CaseInfo alwaysInline tcdict)
682− tcase covering reflect asserted ps_in ps_tot ps_ct ps_rt ty uctxt
684+ tcase covering reflect asserted ps_in
685+ ps_tot ps_inl ps_ct ps_rt ty uctxt
683686 = let ctxt = definitions uctxt
684687 access = case lookupDefAcc n False uctxt of
685688 [(_, acc)] -> acc
686689 _ -> Public
687690 ctxt' = case (simpleCase tcase covering reflect CompileTime (FC "" 0) ps_tot,
688691 simpleCase tcase covering reflect CompileTime (FC "" 0) ps_ct,
692+ simpleCase tcase covering reflect CompileTime (FC "" 0) ps_inl,
689693 simpleCase tcase covering reflect RunTime (FC "" 0) ps_rt) of
690694 (OK (CaseDef args_tot sc_tot _),
691695 OK (CaseDef args_ct sc_ct _),
696+ OK (CaseDef args_inl sc_inl _),
692697 OK (CaseDef args_rt sc_rt _)) ->
693698 let inl = alwaysInline -- || tcdict
694699 inlc = (inl || small n args_ct sc_ct) && (not asserted)
695700 inlr = inl || small n args_rt sc_rt
696701 cdef = CaseDefs (args_tot, sc_tot)
697702 (args_ct, sc_ct)
703+ (args_inl, sc_inl)
698704 (args_rt, sc_rt) in
699705 addDef n (CaseOp (ci { case_inlinable = inlc })
700706 ty ps_in ps_tot cdef,
701707 access, Unchecked) ctxt in
702708 uctxt { definitions = ctxt' }
703709
710+-- simplify a definition for totality checking
704711simplifyCasedef :: Name -> Context -> Context
705712simplifyCasedef n uctxt
706713 = let ctxt = definitions uctxt