From 28a2641df29cd7530c3ebe329dc118ba3f444b10 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Pédrot Date: Sun, 2 Mar 2014 20:40:16 +0100 Subject: Fixing generic hashes and replacing them with proper ones. --- kernel/vm.ml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'kernel/vm.ml') diff --git a/kernel/vm.ml b/kernel/vm.ml index bc7116a35..30add56f9 100644 --- a/kernel/vm.ml +++ b/kernel/vm.ml @@ -304,13 +304,26 @@ let val_of_str_const str = val_of_obj (obj_of_str_const str) let val_of_atom a = val_of_obj (obj_of_atom a) -let idkey_tbl = Hashtbl.create 31 +module IdKeyHash = +struct + type t = id_key + let equal = Names.eq_id_key + open Hashset.Combine + let hash = function + | ConstKey c -> combinesmall 1 (Constant.hash c) + | VarKey id -> combinesmall 2 (Id.hash id) + | RelKey i -> combinesmall 3 (Int.hash i) +end + +module KeyTable = Hashtbl.Make(IdKeyHash) + +let idkey_tbl = KeyTable.create 31 let val_of_idkey key = - try Hashtbl.find idkey_tbl key + try KeyTable.find idkey_tbl key with Not_found -> let v = val_of_atom (Aid key) in - Hashtbl.add idkey_tbl key v; + KeyTable.add idkey_tbl key v; v let val_of_rel k = val_of_idkey (RelKey k) -- cgit v1.2.3