aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Arnaud Spiwack <arnaud@spiwack.net>2014-09-15 15:24:47 +0200
committerGravatar Arnaud Spiwack <arnaud@spiwack.net>2014-09-15 15:44:11 +0200
commit27e2e43b93491727096b9d1fb20f66cfc71ae320 (patch)
treedac5b961ae3ade5361e84d9bb57ecb3bf64927e9
parent7ec7714aa7649fc1bae463f4200fa8c16729026a (diff)
Ltac names in binders: some Ltac values can be seen both as terms and identifiers.
Fixes Ergo.
-rw-r--r--tactics/tacinterp.ml29
1 files changed, 17 insertions, 12 deletions
diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml
index 9d2f8c904..abaee194e 100644
--- a/tactics/tacinterp.ml
+++ b/tactics/tacinterp.ml
@@ -453,18 +453,23 @@ let interp_fresh_id ist env sigma l =
(* Extract the uconstr list from lfun *)
let extract_ltac_constr_context ist env =
let open Glob_term in
- let fold id v ({idents;typed;untyped} as accu) =
- try
- let c = coerce_to_uconstr env v in
- { idents ; typed ; untyped = Id.Map.add id c untyped }
- with CannotCoerceTo _ -> try
- let c = coerce_to_constr env v in
- { idents ; typed = Id.Map.add id c typed ; untyped }
- with CannotCoerceTo _ -> try
- let id' = coerce_to_ident false env v in
- { idents = Id.Map.add id id' idents ; typed ; untyped }
- with CannotCoerceTo _ ->
- accu
+ let add_uconstr id env v map =
+ try Id.Map.add id (coerce_to_uconstr env v) map
+ with CannotCoerceTo _ -> map
+ in
+ let add_constr id env v map =
+ try Id.Map.add id (coerce_to_constr env v) map
+ with CannotCoerceTo _ -> map
+ in
+ let add_ident id env v map =
+ try Id.Map.add id (coerce_to_ident false env v) map
+ with CannotCoerceTo _ -> map
+ in
+ let fold id v {idents;typed;untyped} =
+ let idents = add_ident id env v idents in
+ let typed = add_constr id env v typed in
+ let untyped = add_uconstr id env v untyped in
+ { idents ; typed ; untyped }
in
let empty = { idents = Id.Map.empty ;typed = Id.Map.empty ; untyped = Id.Map.empty } in
Id.Map.fold fold ist.lfun empty