aboutsummaryrefslogtreecommitdiff
path: root/kernel/cClosure.ml
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2018-04-09 13:20:37 +0200
committerPierre-Marie Pédrot2018-10-11 13:09:03 +0200
commit2f2d31d8408b4e15b193110309c4800a456cfb83 (patch)
tree2acf7211d63835eee3bdf3063befe330e9dad3e3 /kernel/cClosure.ml
parent4a244648cff78c7f7333ac5b335de3f6e742908a (diff)
The cbv reduction does not rely on the kernel info data structure anymore.
Diffstat (limited to 'kernel/cClosure.ml')
-rw-r--r--kernel/cClosure.ml28
1 files changed, 10 insertions, 18 deletions
diff --git a/kernel/cClosure.ml b/kernel/cClosure.ml
index 819a66c190..af50623429 100644
--- a/kernel/cClosure.ml
+++ b/kernel/cClosure.ml
@@ -310,20 +310,6 @@ let ref_value_cache ({i_cache = cache;_} as infos) tab ref =
| NotEvaluableConst _ (* Const *)
-> None
-let evar_value cache ev =
- cache.i_sigma ev
-
-let create ~repr ~share flgs env evars =
- let cache =
- { i_repr = repr;
- i_env = env;
- i_sigma = evars;
- i_rels = env.env_rel_context.env_rel_map;
- i_share = share;
- }
- in { i_flags = flgs; i_cache = cache }
-
-
(**********************************************************************)
(* Lazy reduction: the one used in kernel operations *)
@@ -944,7 +930,7 @@ let rec knr info tab m stk =
| FLetIn (_,v,_,bd,e) when red_set info.i_flags fZETA ->
knit info tab (subs_cons([|v|],e)) bd stk
| FEvar(ev,env) ->
- (match evar_value info.i_cache ev with
+ (match info.i_cache.i_sigma ev with
Some c -> knit info tab env c stk
| None -> (m,stk))
| FLOCKED | FRel _ | FAtom _ | FFlex _ | FInd _ | FApp _ | FProj _
@@ -1054,17 +1040,23 @@ let whd_stack infos tab m stk = match m.norm with
(* cache of constants: the body is computed only when needed. *)
type clos_infos = fconstr infos
+type clos_tab = fconstr infos_tab
let create_clos_infos ?(evars=fun _ -> None) flgs env =
let share = (Environ.typing_flags env).Declarations.share_reduction in
- create ~share ~repr:(fun _ _ c -> inject c) flgs env evars
+ let cache = {
+ i_repr = (fun _ _ c -> inject c);
+ i_env = env;
+ i_sigma = evars;
+ i_rels = env.env_rel_context.env_rel_map;
+ i_share = share;
+ } in
+ { i_flags = flgs; i_cache = cache }
let create_tab () = KeyTable.create 17
let oracle_of_infos infos = Environ.oracle infos.i_cache.i_env
-let env_of_infos infos = infos.i_cache.i_env
-
let infos_with_reds infos reds =
{ infos with i_flags = reds }