From 3f7f3a9bc9fde8e1d44d1179fa8dd16221ebf526 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Fri, 25 Jul 2014 17:52:46 +0200 Subject: - Do module substitution inside mind_record. - Distinguish between primitive and non-primitive records in the kernel declaration, so as to try eta-conversion on primitive records only. --- kernel/declareops.ml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'kernel/declareops.ml') diff --git a/kernel/declareops.ml b/kernel/declareops.ml index 51b7b6f971..9d2382f6ec 100644 --- a/kernel/declareops.ml +++ b/kernel/declareops.ml @@ -223,8 +223,14 @@ let subst_mind_packet sub mbp = mind_nb_args = mbp.mind_nb_args; mind_reloc_tbl = mbp.mind_reloc_tbl } +let subst_mind_record sub (c, ps as r) = + let c' = subst_mps sub c in + let ps' = Array.smartmap (subst_constant sub) ps in + if c' == c && ps' == ps then r + else (c', ps') + let subst_mind_body sub mib = - { mind_record = mib.mind_record ; + { mind_record = Option.smartmap (subst_mind_record sub) mib.mind_record ; mind_finite = mib.mind_finite ; mind_ntypes = mib.mind_ntypes ; mind_hyps = (match mib.mind_hyps with [] -> [] | _ -> assert false); -- cgit v1.2.3