]> matita.cs.unibo.it Git - helm.git/blobdiff - components/registry/helm_registry.ml
fast and sound registry lists
[helm.git] / components / registry / helm_registry.ml
index 64277415f7186984e929326c11bd6ef087c6d210..fd0df50136add3246c4e2f1aff7734fad05c0d7f 100644 (file)
@@ -201,7 +201,9 @@ let set_opt registry marshaller ~key ~value =
 
 let get_list registry unmarshaller key =
   try
-    List.map unmarshaller (get registry key)
+    let tmp = get registry key in
+    let rc = List.map unmarshaller tmp in
+    rc
   with Key_not_found _ -> []
 
 (* FG *)
@@ -209,10 +211,11 @@ let get_pair registry fst_unmarshaller snd_unmarshaller =
   get_typed registry (pair fst_unmarshaller snd_unmarshaller) 
 
 let set_list registry marshaller ~key ~value =
-  Hashtbl.remove registry key;
-  List.iter
-    (fun v -> set' ~replace:false registry ~key ~value:(marshaller v))
-    value
+  (* since ocaml hash table are crazy... *)
+  while Hashtbl.mem registry key do
+    Hashtbl.remove registry key
+  done;
+  List.iter (fun v -> set' registry ~key ~value:(marshaller v)) value
 
 type xml_tree =
   | Cdata of string