Coccinelle release 0.2.5-rc8
[bpt/coccinelle.git] / parsing_c / visitor_c.ml
index b8f16dd..28a4729 100644 (file)
@@ -330,7 +330,8 @@ let rec vk_expr = fun bigf expr ->
 
     | ParenExpr (e) -> exprf e
 
-    | New  t -> vk_argument bigf t
+    | New  t   -> vk_argument bigf t
+    | Delete e -> vk_expr bigf e
 
 
   in exprf expr
@@ -442,7 +443,7 @@ and vk_type = fun bigf t ->
     iif iiq;
     iif iit;
     match unwrap_t with
-    | NoType -> ()
+    | NoType -> ()
     | BaseType _ -> ()
     | Pointer t -> typef t
     | Array (eopt, t) ->
@@ -502,6 +503,8 @@ and vk_decl = fun bigf d ->
         vk_argument_list bigf args;
   in f (k, bigf) d
 
+and vk_decl_list = fun bigf ts ->
+  ts +> List.iter (vk_decl bigf)
 
 and vk_onedecl = fun bigf onedecl ->
   let iif ii = vk_ii bigf ii in
@@ -519,10 +522,10 @@ and vk_onedecl = fun bigf onedecl ->
     attrs +> List.iter (vk_attribute bigf);
     var +> Common.do_option (fun (name, iniopt) ->
       vk_name bigf name;
-      iniopt +> Common.do_option (fun (info, ini) ->
-      iif [info];
-      vk_ini bigf ini;
-      );
+      (match iniopt with
+       Ast_c.NoInit -> ()
+      |        Ast_c.ValInit(iini,init) -> iif [iini]; vk_ini bigf init
+      |        Ast_c.ConstrInit((init,ii)) -> iif ii; vk_argument_list bigf init)
     )
   in f (k, bigf) onedecl
 
@@ -1058,6 +1061,7 @@ let rec vk_expr_s = fun bigf expr ->
       | ParenExpr (e) -> ParenExpr (exprf e)
 
       | New  t        -> New (vk_argument_s bigf t)
+      | Delete e      -> Delete (vk_expr_s bigf e)
 
     in
     (e', typ'), (iif ii)
@@ -1298,10 +1302,15 @@ and vk_decl_s = fun bigf d ->
     {v_namei =
       (var +> map_option (fun (name, iniopt) ->
         vk_name_s bigf name,
-        iniopt +> map_option (fun (info, init) ->
-          vk_info_s bigf info,
-          vk_ini_s bigf init
-        )));
+       (match iniopt with
+       Ast_c.NoInit -> iniopt
+      |        Ast_c.ValInit(iini,init) ->
+         Ast_c.ValInit(vk_info_s bigf iini,vk_ini_s bigf init)
+      |        Ast_c.ConstrInit((init,ii)) ->
+         let init =
+           init +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii) in
+         Ast_c.ConstrInit((init, List.map (vk_info_s bigf) ii)))
+        ));
      v_type = vk_type_s bigf t;
     (* !!! dont go in semantic related stuff !!! *)
      v_type_bis = tbis;
@@ -1313,6 +1322,9 @@ and vk_decl_s = fun bigf d ->
 
   in f (k, bigf) d
 
+and vk_decl_list_s = fun bigf decls ->
+  decls +> List.map (vk_decl_s bigf)
+
 and vk_ini_s = fun bigf ini ->
   let rec inif ini = bigf.kini_s (k,bigf) ini
   and k ini =