aboutsummaryrefslogtreecommitdiff
path: root/pretyping/evd.ml
diff options
context:
space:
mode:
authorherbelin2008-10-18 15:57:24 +0000
committerherbelin2008-10-18 15:57:24 +0000
commit8cf4e04fa817cf7ff9d73cb5cb7fff8b3b950387 (patch)
tree30fbd47a7c79a0bc4e5d8a94db78294e6b62b02f /pretyping/evd.ml
parent41dcb1603ea2e212a9167918f3d5dcb6f166e27b (diff)
Optimisation de clenv.ml pour que meta_instance ne soit pas appelé
abusivement sur les clauses. Nettoyage au passage de metamap qui était utilisé à la fois pour les substitutions de meta et pour les contextes de typage de meta. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11467 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping/evd.ml')
-rw-r--r--pretyping/evd.ml6
1 files changed, 6 insertions, 0 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index b29afc0cb3..2b9a0ed82d 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -610,12 +610,18 @@ let meta_with_name evd id =
(str "Binder name \"" ++ pr_id id ++
strbrk "\" occurs more than once in clause.")
+let mk_meta_subst evd =
+ Metamap.fold (fun mv cl subst -> match cl with
+ | Clval(_,(b,_),typ) -> (mv, b.rebus) :: subst
+ | Cltyp (_,typ) -> subst) evd.metas []
let meta_merge evd1 evd2 =
{evd2 with
metas = List.fold_left (fun m (n,v) -> Metamap.add n v m)
evd2.metas (metamap_to_list evd1.metas) }
+let replace_metas metas evd = { evd with metas = metas }
+
type metabinding = metavariable * constr * instance_status
let retract_coercible_metas evd =