diff options
author | 2016-11-19 02:45:54 +0100 | |
---|---|---|
committer | 2017-02-14 17:28:59 +0100 | |
commit | 34e86e839be251717db96f1f5969d7724ab43097 (patch) | |
tree | b62c2f97c7277250796b7f9b3783b95590ea98ab /engine | |
parent | 7b43de20a4acd7c9da290f038d9a16fe67eccd59 (diff) |
Hints API using EConstr.
Diffstat (limited to 'engine')
-rw-r--r-- | engine/evarutil.ml | 6 | ||||
-rw-r--r-- | engine/evarutil.mli | 2 | ||||
-rw-r--r-- | engine/termops.ml | 5 | ||||
-rw-r--r-- | engine/termops.mli | 2 |
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 *) |