aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2006-02-01 15:09:07 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2006-02-01 15:09:07 +0000
commit9061e9a6476288252463ace449d6aa0e92f1b232 (patch)
treec8418db44231d6a9165892d4fe3630356016c003
parent88ad2844b6480bd933c8a7bee29ec4c63a13fadf (diff)
Optimisation filtrage sans lieurs (utile pour Ltac)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@7970 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/matching.ml14
1 files changed, 9 insertions, 5 deletions
diff --git a/pretyping/matching.ml b/pretyping/matching.ml
index 64b63548d..462fe1eb1 100644
--- a/pretyping/matching.ml
+++ b/pretyping/matching.ml
@@ -89,11 +89,15 @@ let matches_core convert allow_partial_app pat c =
| PMeta (Some n), m ->
let depth = List.length stk in
- let frels = Intset.elements (free_rels cT) in
- if List.for_all (fun i -> i > depth) frels then
- constrain (n,lift (-depth) cT) sigma
- else
- raise PatternMatchingFailure
+ if depth = 0 then
+ (* Optimisation *)
+ constrain (n,cT) sigma
+ else
+ let frels = Intset.elements (free_rels cT) in
+ if List.for_all (fun i -> i > depth) frels then
+ constrain (n,lift (-depth) cT) sigma
+ else
+ raise PatternMatchingFailure
| PMeta None, m -> sigma