Release coccinelle-0.1.8
[bpt/coccinelle.git] / parsing_cocci / adjacency.ml
1 module Ast0 = Ast0_cocci
2 module V0 = Visitor_ast0
3 module VT0 = Visitor_ast0_types
4
5 let compute_adjacency p =
6 let counter = ref 0 in
7 let mcode (a,b,c,d,e,_) = (a,b,c,d,e,!counter) in
8 let string_mcode ((str,_,info,mc,_,_) as x) =
9 match str with
10 "..." | "<..." | "...>" | "<+..." | "...+>" ->
11 (match mc with
12 Ast0.MINUS _ -> mcode x
13 | Ast0.CONTEXT _ -> counter := !counter + 1; x
14 | _ -> failwith "unexpected mcode for ...")
15 | _ -> mcode x in
16 let fn =
17 V0.rebuilder
18 {V0.rebuilder_functions with
19 VT0.rebuilder_meta_mcode = mcode;
20 VT0.rebuilder_string_mcode = string_mcode;
21 VT0.rebuilder_const_mcode = mcode;
22 VT0.rebuilder_assign_mcode = mcode;
23 VT0.rebuilder_fix_mcode = mcode;
24 VT0.rebuilder_unary_mcode = mcode;
25 VT0.rebuilder_binary_mcode = mcode;
26 VT0.rebuilder_cv_mcode = mcode;
27 VT0.rebuilder_sign_mcode = mcode;
28 VT0.rebuilder_struct_mcode = mcode;
29 VT0.rebuilder_storage_mcode = mcode;
30 VT0.rebuilder_inc_mcode = mcode;} in
31 List.map fn.VT0.rebuilder_rec_top_level p
32