X-Git-Url: https://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/f59c9fb7f14038b6e15c3578d930f164a8df9c6c..5427db06e325c3c7c572e2e1ebe88a2fd211641c:/parsing_c/pretty_print_c.ml diff --git a/parsing_c/pretty_print_c.ml b/parsing_c/pretty_print_c.ml index 80e8eea..8029f09 100644 --- a/parsing_c/pretty_print_c.ml +++ b/parsing_c/pretty_print_c.ml @@ -41,7 +41,9 @@ type pretty_printers = { statement : Ast_c.statement printer; decl : Ast_c.declaration printer; field : Ast_c.field printer; + field_list : Ast_c.field list printer; init : Ast_c.initialiser printer; + init_list : (Ast_c.initialiser wrap2 list) printer; param : Ast_c.parameterType printer; paramlist : (Ast_c.parameterType Ast_c.wrap2 list) printer; ty : Ast_c.fullType printer; @@ -78,7 +80,11 @@ let mk_pretty_printers start_block(); f(); pr_unindent() in - + let pp_list printer l = + l +> List.iter (fun (e, opt) -> + assert (List.length opt <= 1); (* opt must be a comma? *) + opt +> List.iter (function x -> pr_elem x; pr_space()); + printer e) in let rec pp_expression = fun ((exp, typ), ii) -> (match exp, ii with @@ -145,7 +151,8 @@ let mk_pretty_printers | ParenExpr (e), [i1;i2] -> pr_elem i1; pp_expression e; pr_elem i2; - | New (t), [i1] -> pr_elem i1; pp_argument t + | New (t), [i1] -> pr_elem i1; pp_argument t + | Delete(t), [i1] -> pr_elem i1; pp_expression t | (Ident (_) | Constant _ | FunCall (_,_) | CondExpr (_,_,_) | Sequence (_,_) @@ -154,7 +161,7 @@ let mk_pretty_printers | ArrayAccess (_,_) | RecordAccess (_,_) | RecordPtAccess (_,_) | SizeOfExpr (_) | SizeOfType (_) | Cast (_,_) | StatementExpr (_) | Constructor _ - | ParenExpr (_) | New (_)),_ -> raise Impossible + | ParenExpr (_) | New (_) | Delete (_)),_ -> raise Impossible ); if !Flag_parsing_c.pretty_print_type_info @@ -171,11 +178,7 @@ let mk_pretty_printers pr_elem (Ast_c.fakeInfo() +> Ast_c.rewrap_str "*/"); end - and pp_arg_list es = - es +> List.iter (fun (e, opt) -> - assert (List.length opt <= 1); (* opt must be a comma? *) - opt +> List.iter (function x -> pr_elem x; pr_space()); - pp_argument e) + and pp_arg_list es = pp_list pp_argument es and pp_argument argument = let rec pp_action (ActMisc ii) = ii +> List.iter pr_elem in @@ -552,6 +555,7 @@ let mk_pretty_printers (* | TypeOfExpr _ | TypeOfType _ *) ), _ -> raise Impossible + and pp_field_list fields = fields +> Common.print_between pr_nl pp_field and pp_field = function DeclarationField(FieldDeclList(onefield_multivars,iiptvirg))-> (match onefield_multivars with @@ -860,9 +864,12 @@ let mk_pretty_printers pp_type_with_ident (Some (s, iis)) (Some (storage, iisto)) returnType attrs; - iniopt +> do_option (fun (iini, init) -> - pr_elem iini; - pp_init init); + (match iniopt with + Ast_c.NoInit -> () + | Ast_c.ValInit(iini,init) -> pr_elem iini; pp_init init + | Ast_c.ConstrInit((init,[lp;rp])) -> + pr_elem lp; pp_arg_list init; pr_elem rp + | Ast_c.ConstrInit _ -> raise Impossible) | None -> pp_type returnType ); @@ -879,9 +886,12 @@ let mk_pretty_printers iivirg +> List.iter pr_elem; pp_type_with_ident_rest (Some (s, iis)) returnType attrs; - iniopt +> do_option (fun (iini, init) -> - pr_elem iini; pp_init init - ); + (match iniopt with + Ast_c.NoInit -> () + | Ast_c.ValInit(iini,init) -> pr_elem iini; pp_init init + | Ast_c.ConstrInit((init,[lp;rp])) -> + pr_elem lp; pp_arg_list init; pr_elem rp + | Ast_c.ConstrInit _ -> raise Impossible); | x -> raise Impossible @@ -889,7 +899,7 @@ let mk_pretty_printers pr_elem iivirg; - | MacroDecl ((s, es), iis::lp::rp::iiend::ifakestart::iisto) -> + | MacroDecl ((s, es, true), iis::lp::rp::iiend::ifakestart::iisto) -> pr_elem ifakestart; iisto +> List.iter pr_elem; (* static and const *) pr_elem iis; @@ -903,6 +913,19 @@ let mk_pretty_printers pr_elem rp; pr_elem iiend; + | MacroDecl ((s, es, false), iis::lp::rp::ifakestart::iisto) -> + pr_elem ifakestart; + iisto +> List.iter pr_elem; (* static and const *) + pr_elem iis; + pr_elem lp; + es +> List.iter (fun (e, opt) -> + assert (List.length opt <= 1); + opt +> List.iter pr_elem; + pp_argument e; + ); + + pr_elem rp; + | (DeclList (_, _) | (MacroDecl _)) -> raise Impossible @@ -937,7 +960,7 @@ and pp_init (init, iinit) = | InitList _ | InitExpr _ ), _ -> raise Impossible - + and pp_init_list ini = pp_list pp_init ini and pp_designator = function | DesignatorField (s), [i1; i2] -> @@ -1029,11 +1052,7 @@ and pp_init (init, iinit) = pr_elem i2; | _ -> raise Impossible - and pp_param_list paramst = - paramst +> List.iter (fun (param,iicomma) -> - assert ((List.length iicomma) <= 1); - iicomma +> List.iter (function x -> pr_elem x; pr_space()); - pp_param param) + and pp_param_list paramst = pp_list pp_param paramst (* ---------------------- *) @@ -1302,9 +1321,11 @@ and pp_init (init, iinit) = statement = pp_statement; decl = pp_decl; field = pp_field; + field_list = pp_field_list; init = pp_init; + init_list = pp_init_list; param = pp_param; - paramlist = pp_param_list; + paramlist = pp_param_list; ty = pp_type; type_with_ident = pp_type_with_ident; toplevel = pp_toplevel; @@ -1371,9 +1392,15 @@ let pp_decl_gen ~pr_elem ~pr_space = let pp_field_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).field +let pp_field_list_gen ~pr_elem ~pr_space = + (pp_elem_sp pr_elem pr_space).field_list + let pp_init_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).init +let pp_init_list_gen ~pr_elem ~pr_space = + (pp_elem_sp pr_elem pr_space).init_list + let pp_param_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).param