Release coccinelle-0.1.8
[bpt/coccinelle.git] / engine / postprocess_transinfo.ml
index 0d07454..1a66f31 100644 (file)
@@ -105,11 +105,29 @@ let process_tree inherited_env l =
 let collect_used_after used_after envs =
   List.map (List.filter (function (v,vl) -> List.mem v used_after)) envs
 
+(* ----------------------------------------------------------------------- *)
+(* distinguish between distinct witness trees, each gets an index n *)
+
+let numberify trees =
+  let trees =
+    Common.fold_left_with_index
+      (function acc -> function xs -> function n ->
+       (List.map (function x -> (n,x)) xs) @ acc)
+      [] trees in
+  List.fold_left
+    (function res ->
+      function (n,x) ->
+       let (same,diff) = List.partition (function (ns,xs) -> x = xs) res in
+       match same with
+         [(ns,xs)] -> (n::ns,xs)::diff
+       | _ -> ([n],x)::res)
+    [] trees
+
 (* ----------------------------------------------------------------------- *)
 (* entry point *)
 
 let process used_after inherited_env l =
-  extra_counter := 0;
   let (trees, fresh_envs) =
     List.split (List.map (process_tree inherited_env) l) in
-  (Common.uniq(List.concat trees), collect_used_after used_after fresh_envs)
+  let trees = numberify trees in
+  (trees, collect_used_after used_after fresh_envs)