aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
authorherbelin2008-03-06 11:23:13 +0000
committerherbelin2008-03-06 11:23:13 +0000
commit6f3400ed7f6aa2810d72f803273f04a7add04207 (patch)
tree47cb80f613633d5d23a679da313dd20c32b2b68c /pretyping
parent49719da11fda90dda89c66fdddcc1ac9a23bb43e (diff)
Toujours suite commits 10623 et 10624:
- l'occur-check doit être fait aussi quand on imite, - pour simplifier et en se basant sur les commentaires antérieurs à 1995 (de Chet?) et parlant de mimick_evar, on restreint l'appel à mimick_evar au cas où l'instance contient des Meta. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10626 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/unification.ml12
1 files changed, 5 insertions, 7 deletions
diff --git a/pretyping/unification.ml b/pretyping/unification.ml
index 0869bfb020..1741d7fea7 100644
--- a/pretyping/unification.ml
+++ b/pretyping/unification.ml
@@ -445,14 +445,12 @@ let w_merge env with_types flags metas evars evd =
else begin
let rhs' = subst_meta_instances metas rhs in
match kind_of_term rhs with
- | App (f,cl) when is_mimick_head f ->
- let evd' = solve_simple_evar_eqn env evd ev rhs' in
- (try w_merge_rec evd' metas evars' eqns
- with ex when precatchable_exception ex ->
- let evd' = mimick_evar evd flags f (Array.length cl) evn in
- w_merge_rec evd' metas evars eqns)
+ | App (f,cl) when is_mimick_head f & occur_meta rhs' ->
+ if occur_evar evn rhs' then
+ error_occur_check env (evars_of evd) evn rhs';
+ let evd' = mimick_evar evd flags f (Array.length cl) evn in
+ w_merge_rec evd' metas evars eqns
| _ ->
- (* ensure tail recursion in non-mimickable case! *)
w_merge_rec (solve_simple_evar_eqn env evd ev rhs')
metas evars' eqns
end