diff options
| author | Pierre-Marie Pédrot | 2014-03-05 21:39:39 +0100 |
|---|---|---|
| committer | Pierre-Marie Pédrot | 2014-03-05 21:39:39 +0100 |
| commit | 00df486efd76070b6c3673071050565e0ed4466e (patch) | |
| tree | ef98cd2acfee9bcbea02d664833bb4a586fa4f87 /kernel | |
| parent | 2a0d260c9c80c07844605fcb6844bb9cfdfeb0fd (diff) | |
Using HMaps in Safe_env.environments, hopefully improving performances.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/environ.ml | 2 | ||||
| -rw-r--r-- | kernel/pre_env.ml | 23 | ||||
| -rw-r--r-- | kernel/pre_env.mli | 11 | ||||
| -rw-r--r-- | kernel/safe_typing.ml | 4 |
4 files changed, 32 insertions, 8 deletions
diff --git a/kernel/environ.ml b/kernel/environ.ml index 15db39328c..0bf3923e45 100644 --- a/kernel/environ.ml +++ b/kernel/environ.ml @@ -168,7 +168,7 @@ let no_link_info () = ref NotLinked let add_constant_key kn cb linkinfo env = let new_constants = - Cmap_env.add kn (cb,(linkinfo, ref None)) env.env_globals.env_constants in + Constants.add kn (cb,(linkinfo, ref None)) env.env_globals.env_constants in let new_globals = { env.env_globals with env_constants = new_constants } in diff --git a/kernel/pre_env.ml b/kernel/pre_env.ml index b655887d70..3509ccf0cc 100644 --- a/kernel/pre_env.ml +++ b/kernel/pre_env.ml @@ -38,8 +38,23 @@ type constant_key = constant_body * (link_info ref * key) type mind_key = mutual_inductive_body * link_info ref +module Constants = +struct + module M = + struct + type t = Constant.t + include Constant.UserOrd + end + module CMap = HMap.Make(M) + type t = constant_key CMap.t + let empty = CMap.empty + let add = CMap.add + let find = CMap.find + let fold = CMap.fold +end + type globals = { - env_constants : constant_key Cmap_env.t; + env_constants : Constants.t; env_inductives : mind_key Mindmap_env.t; env_modules : module_body MPmap.t; env_modtypes : module_type_body MPmap.t} @@ -81,7 +96,7 @@ let empty_named_context_val = [],[] let empty_env = { env_globals = { - env_constants = Cmap_env.empty; + env_constants = Constants.empty; env_inductives = Mindmap_env.empty; env_modules = MPmap.empty; env_modtypes = MPmap.empty}; @@ -150,10 +165,10 @@ let env_of_named id env = env (* Global constants *) let lookup_constant_key kn env = - Cmap_env.find kn env.env_globals.env_constants + Constants.find kn env.env_globals.env_constants let lookup_constant kn env = - fst (Cmap_env.find kn env.env_globals.env_constants) + fst (Constants.find kn env.env_globals.env_constants) (* Mutual Inductives *) let lookup_mind kn env = diff --git a/kernel/pre_env.mli b/kernel/pre_env.mli index 964d709cff..4596b23aaa 100644 --- a/kernel/pre_env.mli +++ b/kernel/pre_env.mli @@ -25,8 +25,17 @@ type constant_key = constant_body * (link_info ref * key) type mind_key = mutual_inductive_body * link_info ref +module Constants : +sig + type t + val empty : t + val add : Constant.t -> constant_key -> t -> t + val find : Constant.t -> t -> constant_key + val fold : (Constant.t -> constant_key -> 'a -> 'a) -> t -> 'a -> 'a +end + type globals = { - env_constants : constant_key Cmap_env.t; + env_constants : Constants.t; env_inductives : mind_key Mindmap_env.t; env_modules : module_body MPmap.t; env_modtypes : module_type_body MPmap.t} diff --git a/kernel/safe_typing.ml b/kernel/safe_typing.ml index bf758b96b1..670e115af8 100644 --- a/kernel/safe_typing.ml +++ b/kernel/safe_typing.ml @@ -766,9 +766,9 @@ let register_inline kn senv = if not (evaluable_constant kn senv.env) then Errors.error "Register inline: an evaluable constant is expected"; let env = pre_env senv.env in - let (cb,r) = Cmap_env.find kn env.env_globals.env_constants in + let (cb,r) = Constants.find kn env.env_globals.env_constants in let cb = {cb with const_inline_code = true} in - let new_constants = Cmap_env.add kn (cb,r) env.env_globals.env_constants in + let new_constants = Constants.add kn (cb,r) env.env_globals.env_constants in let new_globals = { env.env_globals with env_constants = new_constants } in let env = { env with env_globals = new_globals } in { senv with env = env_of_pre_env env } |
