aboutsummaryrefslogtreecommitdiffhomepage
path: root/engine
diff options
context:
space:
mode:
authorGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2016-11-19 02:45:54 +0100
committerGravatar Pierre-Marie Pédrot <pierre-marie.pedrot@inria.fr>2017-02-14 17:28:59 +0100
commit34e86e839be251717db96f1f5969d7724ab43097 (patch)
treeb62c2f97c7277250796b7f9b3783b95590ea98ab /engine
parent7b43de20a4acd7c9da290f038d9a16fe67eccd59 (diff)
Hints API using EConstr.
Diffstat (limited to 'engine')
-rw-r--r--engine/evarutil.ml6
-rw-r--r--engine/evarutil.mli2
-rw-r--r--engine/termops.ml5
-rw-r--r--engine/termops.mli2
4 files changed, 9 insertions, 6 deletions
diff --git a/engine/evarutil.ml b/engine/evarutil.ml
index 35fe9cf66..8b75d8242 100644
--- a/engine/evarutil.ml
+++ b/engine/evarutil.ml
@@ -187,7 +187,9 @@ let is_ground_env = memo is_ground_env
exception NoHeadEvar
-let head_evar =
+let head_evar sigma c =
+ (** FIXME: this breaks if using evar-insensitive code *)
+ let c = EConstr.Unsafe.to_constr c in
let rec hrec c = match kind_of_term c with
| Evar (evk,_) -> evk
| Case (_,_,c,_) -> hrec c
@@ -196,7 +198,7 @@ let head_evar =
| Proj (p, c) -> hrec c
| _ -> raise NoHeadEvar
in
- hrec
+ hrec c
(* Expand head evar if any (currently consider only applications but I
guess it should consider Case too) *)
diff --git a/engine/evarutil.mli b/engine/evarutil.mli
index ad3851ea3..1b592b790 100644
--- a/engine/evarutil.mli
+++ b/engine/evarutil.mli
@@ -88,7 +88,7 @@ val non_instantiated : evar_map -> evar_info Evar.Map.t
(** [head_evar c] returns the head evar of [c] if any *)
exception NoHeadEvar
-val head_evar : constr -> existential_key (** may raise NoHeadEvar *)
+val head_evar : evar_map -> EConstr.constr -> existential_key (** may raise NoHeadEvar *)
(* Expand head evar if any *)
val whd_head_evar : evar_map -> EConstr.constr -> EConstr.constr
diff --git a/engine/termops.ml b/engine/termops.ml
index ef7cdc38b..7c89f190f 100644
--- a/engine/termops.ml
+++ b/engine/termops.ml
@@ -263,9 +263,10 @@ let rec drop_extra_implicit_args sigma c = match EConstr.kind sigma c with
(* Removed trailing extra implicit arguments, what improves compatibility
for constants with recently added maximal implicit arguments *)
| App (f,args) when EConstr.isEvar sigma (Array.last args) ->
+ let open EConstr in
drop_extra_implicit_args sigma
- (EConstr.mkApp (f,fst (Array.chop (Array.length args - 1) args)))
- | _ -> EConstr.Unsafe.to_constr c
+ (mkApp (f,fst (Array.chop (Array.length args - 1) args)))
+ | _ -> c
(* Get the last arg of an application *)
let last_arg sigma c = match EConstr.kind sigma c with
diff --git a/engine/termops.mli b/engine/termops.mli
index 72c0cedda..a865c80fb 100644
--- a/engine/termops.mli
+++ b/engine/termops.mli
@@ -96,7 +96,7 @@ val iter_constr_with_full_binders :
(**********************************************************************)
val strip_head_cast : Evd.evar_map -> EConstr.t -> EConstr.t
-val drop_extra_implicit_args : Evd.evar_map -> EConstr.t -> constr
+val drop_extra_implicit_args : Evd.evar_map -> EConstr.t -> EConstr.constr
(** occur checks *)