aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Herbelin2014-10-02 18:58:54 +0200
committerHugo Herbelin2014-10-02 18:59:07 +0200
commit0c320e79ba30bf567d4ca194bc114d733baf76e5 (patch)
tree881b5a63de22e0078bcd27480c8157ac76190bfe
parent2b26c3e9a011af1f77e4f4fc61c73943d2bb0dfc (diff)
Fixing interpretation of constr under binders which was broken after
it became possible to have binding names themselves bound to ltac variables (2fcc458af16b).
-rw-r--r--dev/top_printers.ml2
-rw-r--r--pretyping/pretyping.ml5
2 files changed, 4 insertions, 3 deletions
diff --git a/dev/top_printers.ml b/dev/top_printers.ml
index 2cbac21753..0345ddfabc 100644
--- a/dev/top_printers.ml
+++ b/dev/top_printers.ml
@@ -104,7 +104,7 @@ let ppevarsubst = ppidmap (fun id0 -> prset (fun (c,copt,id) ->
else spc () ++ str "<canonical: " ++ pr_id id ++ str ">"))))
let ppconstrunderbindersidmap l = ppidmap (fun id (l,c) ->
- Id.print id ++ str "->" ++ hov 1 (str"[" ++ prlist Id.print l ++ str"]")
+ Id.print id ++ str "->" ++ hov 1 (str"[" ++ prlist_with_sep spc Id.print l ++ str"]")
++ str "," ++ spc () ++ Termops.print_constr c)
let ppunbound_ltac_var_map l = ppidmap (fun id arg ->
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml
index 69aee0a602..b20af031df 100644
--- a/pretyping/pretyping.ml
+++ b/pretyping/pretyping.ml
@@ -257,7 +257,8 @@ let ltac_interp_name { ltac_idents ; ltac_genargs } = function
str"It cannot be used in a binder.")
else n
-let invert_ltac_bound_name env id0 id =
+let invert_ltac_bound_name lvar env id0 id =
+ let id = Id.Map.find id lvar.ltac_idents in
try mkRel (pi1 (lookup_rel_id id (rel_context env)))
with Not_found ->
errorlabstrm "" (str "Ltac variable " ++ pr_id id0 ++
@@ -285,7 +286,7 @@ let pretype_id pretype loc env evdref lvar id =
(* Check if [id] is an ltac variable *)
try
let (ids,c) = Id.Map.find id lvar.ltac_constrs in
- let subst = List.map (invert_ltac_bound_name env id) ids in
+ let subst = List.map (invert_ltac_bound_name lvar env id) ids in
let c = substl subst c in
{ uj_val = c; uj_type = protected_get_type_of env sigma c }
with Not_found -> try