aboutsummaryrefslogtreecommitdiff
path: root/tactics
diff options
context:
space:
mode:
authorbarras2009-03-04 19:47:42 +0000
committerbarras2009-03-04 19:47:42 +0000
commitf8ae76ca7965e176094496bf17dd77bff1acae10 (patch)
treef5f61a9fc0a54a4ac2b53178599542ec760334ce /tactics
parent93b16c35bb0177847d91f26d2d8ad45f20fe4b5c (diff)
illegal tactic application was having Ltac interpreter loop
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11963 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics')
-rw-r--r--tactics/tacinterp.ml6
1 files changed, 5 insertions, 1 deletions
diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml
index ac65d3a52a..9df3ba4ec0 100644
--- a/tactics/tacinterp.ml
+++ b/tactics/tacinterp.ml
@@ -1846,7 +1846,11 @@ and interp_tacarg ist gl = function
(* Interprets an application node *)
and interp_app loc ist gl fv largs =
match fv with
- | VFun(trace,olfun,var,body) ->
+ (* if var=[] this means that evaluation of body has been delayed
+ by val_interp, so it is not a tactic that expects arguments.
+ Otherwise Ltac goes into an infinite loop (val_interp puts
+ a VFun back on body, and then interp_app is called again...) *)
+ | VFun(trace,olfun,(_::_ as var),body) ->
let (newlfun,lvar,lval)=head_with_value (var,largs) in
if lvar=[] then
let v =