summaryrefslogtreecommitdiff
path: root/pretyping/reductionops.ml
diff options
context:
space:
mode:
Diffstat (limited to 'pretyping/reductionops.ml')
-rw-r--r--pretyping/reductionops.ml14
1 files changed, 8 insertions, 6 deletions
diff --git a/pretyping/reductionops.ml b/pretyping/reductionops.ml
index 6fc30aae..2f507318 100644
--- a/pretyping/reductionops.ml
+++ b/pretyping/reductionops.ml
@@ -6,7 +6,7 @@
(* * GNU Lesser General Public License Version 2.1 *)
(************************************************************************)
-(* $Id: reductionops.ml 11010 2008-05-28 15:25:19Z barras $ *)
+(* $Id: reductionops.ml 11309 2008-08-06 10:30:35Z herbelin $ *)
open Pp
open Util
@@ -518,9 +518,11 @@ let whd_eta c = app_stack (local_whd_state_gen eta (c,empty_stack))
(* Replacing defined evars for error messages *)
let rec whd_evar sigma c =
match kind_of_term c with
- | Evar (ev,args)
- when Evd.mem sigma ev & Evd.is_defined sigma ev ->
- whd_evar sigma (Evd.existential_value sigma (ev,args))
+ | Evar ev ->
+ let d =
+ try Some (Evd.existential_value sigma ev)
+ with NotInstantiatedEvar | Not_found -> None in
+ (match d with Some c -> whd_evar sigma c | None -> c)
| Sort s when is_sort_variable sigma s -> whd_sort_variable sigma c
| _ -> collapse_appl c
@@ -773,7 +775,7 @@ let splay_arity env sigma c =
let l, c = splay_prod env sigma c in
match kind_of_term c with
| Sort s -> l,s
- | _ -> error "not an arity"
+ | _ -> invalid_arg "splay_arity"
let sort_of_arity env c = snd (splay_arity env Evd.empty c)
@@ -783,7 +785,7 @@ let decomp_n_prod env sigma n =
| Prod (n,a,c0) ->
decrec (push_rel (n,None,a) env)
(m-1) (Sign.add_rel_decl (n,None,a) ln) c0
- | _ -> error "decomp_n_prod: Not enough products"
+ | _ -> invalid_arg "decomp_n_prod"
in
decrec env n Sign.empty_rel_context