aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2015-11-17 12:39:35 +0100
committerPierre-Marie Pédrot2015-11-17 14:25:12 +0100
commitaf399d81b0505d1f0be8e73cf45044266d5749e5 (patch)
tree1723eebf74e332635ad08a1d5dc073363f051bcd /pretyping
parent8e482fc932fa2b1893025d914d42dd17881c2fac (diff)
Performance fix for destruct.
The clenv_fchain function was needlessly merging universes coming from two evarmaps even though one was an extension of the other. A flag was added so that the tactic just retrieves the newer universes.
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/evd.ml7
-rw-r--r--pretyping/evd.mli2
2 files changed, 6 insertions, 3 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index 4a9466f4f3..c9b9f34414 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -1550,9 +1550,12 @@ let meta_with_name evd id =
let clear_metas evd = {evd with metas = Metamap.empty}
-let meta_merge evd1 evd2 =
+let meta_merge ?(with_univs = true) evd1 evd2 =
let metas = Metamap.fold Metamap.add evd1.metas evd2.metas in
- let universes = union_evar_universe_context evd2.universes evd1.universes in
+ let universes =
+ if with_univs then union_evar_universe_context evd2.universes evd1.universes
+ else evd2.universes
+ in
{evd2 with universes; metas; }
type metabinding = metavariable * constr * instance_status
diff --git a/pretyping/evd.mli b/pretyping/evd.mli
index 5c508419a4..117e52958b 100644
--- a/pretyping/evd.mli
+++ b/pretyping/evd.mli
@@ -451,7 +451,7 @@ val meta_reassign : metavariable -> constr * instance_status -> evar_map -> eva
val clear_metas : evar_map -> evar_map
(** [meta_merge evd1 evd2] returns [evd2] extended with the metas of [evd1] *)
-val meta_merge : evar_map -> evar_map -> evar_map
+val meta_merge : ?with_univs:bool -> evar_map -> evar_map -> evar_map
val undefined_metas : evar_map -> metavariable list
val map_metas_fvalue : (constr -> constr) -> evar_map -> evar_map