aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping/evd.ml
diff options
context:
space:
mode:
authorGravatar Hugo Herbelin <Hugo.Herbelin@inria.fr>2014-06-30 20:45:20 +0200
committerGravatar Hugo Herbelin <Hugo.Herbelin@inria.fr>2014-06-30 20:45:20 +0200
commitfa69f12babe7f04fbda9a22eaf76736a96f0fdea (patch)
treecc6250719586805f0c58cacb854bf81a376ec62f /pretyping/evd.ml
parent26c8ce24a5dad0d54c6efbc7265a15f8d92dfb0b (diff)
Clarifying 'No such bound variable' message in apply, as suggested in #2387
Diffstat (limited to 'pretyping/evd.ml')
-rw-r--r--pretyping/evd.ml17
1 files changed, 15 insertions, 2 deletions
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index 481e4275a..b2bad0c0b 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -1342,6 +1342,20 @@ let meta_reassign mv (v, pb) evd =
let meta_name evd mv =
try fst (clb_name (Metamap.find mv evd.metas)) with Not_found -> Anonymous
+let explain_no_such_bound_variable evd id =
+ let mvl =
+ List.rev (Metamap.fold (fun n clb l ->
+ let na = fst (clb_name clb) in
+ if na != Anonymous then out_name na :: l else l)
+ evd.metas []) in
+ errorlabstrm "Evd.meta_with_name"
+ (str"No such bound variable " ++ pr_id id ++
+ (if mvl == [] then str " (no bound variables at all in the expression)."
+ else
+ (str" (possible name" ++
+ str (if List.length mvl == 1 then " is: " else "s are: ") ++
+ pr_enum pr_id mvl ++ str").")))
+
let meta_with_name evd id =
let na = Name id in
let (mvl,mvnodef) =
@@ -1353,8 +1367,7 @@ let meta_with_name evd id =
evd.metas ([],[]) in
match mvnodef, mvl with
| _,[] ->
- errorlabstrm "Evd.meta_with_name"
- (str"No such bound variable " ++ pr_id id ++ str".")
+ explain_no_such_bound_variable evd id
| ([n],_|_,[n]) ->
n
| _ ->