aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/declareops.ml
diff options
context:
space:
mode:
authorGravatar Matthieu Sozeau <mattam@mattam.org>2014-07-25 17:52:46 +0200
committerGravatar Matthieu Sozeau <mattam@mattam.org>2014-07-25 17:56:06 +0200
commit3f7f3a9bc9fde8e1d44d1179fa8dd16221ebf526 (patch)
treee40711bfad4132309b527c2c6c63b2bb5a61d1f2 /kernel/declareops.ml
parentafe396e1e2d2fee621d96e7cbc950b0a28bd9606 (diff)
- 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.
Diffstat (limited to 'kernel/declareops.ml')
-rw-r--r--kernel/declareops.ml8
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/declareops.ml b/kernel/declareops.ml
index 51b7b6f97..9d2382f6e 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);