aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2017-08-31 18:15:09 +0200
committerPierre-Marie Pédrot2017-08-31 18:15:09 +0200
commit40edf6a111ae2b9f0a230c2617b3e86e8fbfa6dd (patch)
tree6d81bde058ad791078e77c1e5a00226c2d847b4b
parent84047666ce13f1eec440d38d9784ae125612507c (diff)
Fix coq/ltac2#3: Constructor expects n arguments should name which constructor it is.
-rw-r--r--src/tac2intern.ml17
-rw-r--r--src/tac2intern.mli2
2 files changed, 11 insertions, 8 deletions
diff --git a/src/tac2intern.ml b/src/tac2intern.ml
index 051b3af5c7..88824386d9 100644
--- a/src/tac2intern.ml
+++ b/src/tac2intern.ml
@@ -206,9 +206,10 @@ let loc_of_patexpr = function
| CPatVar (loc, _) -> Option.default dummy_loc loc
| CPatRef (loc, _, _) -> loc
-let error_nargs_mismatch loc nargs nfound =
- user_err ~loc (str "Constructor expects " ++ int nargs ++
- str " arguments, but is applied to " ++ int nfound ++
+let error_nargs_mismatch loc kn nargs nfound =
+ let cstr = Tac2env.shortest_qualid_of_constructor kn in
+ user_err ~loc (str "Constructor " ++ pr_qualid cstr ++ str " expects " ++
+ int nargs ++ str " arguments, but is applied to " ++ int nfound ++
str " arguments")
let error_nparams_mismatch loc nargs nfound =
@@ -924,8 +925,10 @@ and intern_case env loc e pl =
let ids = List.map get_id args in
let nids = List.length ids in
let nargs = List.length arity in
- let () =
- if not (Int.equal nids nargs) then error_nargs_mismatch loc nargs nids
+ let () = match knc with
+ | Tuple n -> assert (n == nids)
+ | Other knc ->
+ if not (Int.equal nids nargs) then error_nargs_mismatch loc knc nargs nids
in
let fold env id tpe =
(** Instantiate all arguments *)
@@ -993,7 +996,7 @@ and intern_case env loc e pl =
let nids = List.length ids in
let nargs = List.length data.cdata_args in
let () =
- if not (Int.equal nids nargs) then error_nargs_mismatch loc nargs nids
+ if not (Int.equal nids nargs) then error_nargs_mismatch loc knc nargs nids
in
let fold env id tpe =
(** Instantiate all arguments *)
@@ -1033,7 +1036,7 @@ and intern_constructor env loc kn args = match kn with
| None ->
(GTacOpn (kn, args), ans)
else
- error_nargs_mismatch loc nargs (List.length args)
+ error_nargs_mismatch loc kn nargs (List.length args)
| Tuple n ->
assert (Int.equal n (List.length args));
let types = List.init n (fun i -> GTypVar (fresh_id env)) in
diff --git a/src/tac2intern.mli b/src/tac2intern.mli
index dac074a0eb..8c997b741e 100644
--- a/src/tac2intern.mli
+++ b/src/tac2intern.mli
@@ -41,5 +41,5 @@ val globalize : Id.Set.t -> raw_tacexpr -> raw_tacexpr
(** Errors *)
-val error_nargs_mismatch : Loc.t -> int -> int -> 'a
+val error_nargs_mismatch : Loc.t -> ltac_constructor -> int -> int -> 'a
val error_nparams_mismatch : Loc.t -> int -> int -> 'a