iif is;
statxs +> List.iter (vk_statement_sequencable bigf);
- | Constructor (t, initxs) ->
- vk_type bigf t;
- initxs +> List.iter (fun (ini, ii) ->
- vk_ini bigf ini;
- vk_ii bigf ii;
- )
+ | Constructor (t, init) ->
+ vk_type bigf t; vk_ini bigf init
| 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
| Iteration (While (e, st)) ->
vk_expr bigf e; statf st;
| Iteration (DoWhile (st, e)) -> statf st; vk_expr bigf e;
- | Iteration (For ((e1opt,i1), (e2opt,i2), (e3opt,i3), st)) ->
- statf (mk_st (ExprStatement (e1opt)) i1);
+ | Iteration (For (first, (e2opt,i2), (e3opt,i3), st)) ->
+ (match first with
+ ForExp (e1opt,i1) -> statf (mk_st (ExprStatement (e1opt)) i1)
+ | ForDecl decl -> vk_decl bigf decl);
statf (mk_st (ExprStatement (e2opt)) i2);
statf (mk_st (ExprStatement (e3opt)) i3);
statf st;
iif iiq;
iif iit;
match unwrap_t with
- | NoType _ -> ()
+ | NoType -> ()
| BaseType _ -> ()
| Pointer t -> typef t
| Array (eopt, t) ->
iif ii;
xs +> List.iter (fun (x,ii) ->
iif ii;
- vk_onedecl bigf x;
+ vk_onedecl bigf x
);
- | MacroDecl ((s, args),ii) ->
+ | MacroDecl ((s, args, ptvg),ii) ->
+ iif ii;
+ vk_argument_list bigf args
+ | MacroDeclInit ((s, args, ini),ii) ->
iif ii;
vk_argument_list bigf args;
+ vk_ini bigf ini
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
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
in inif ini
+and vk_ini_list = fun bigf ts ->
+ let iif ii = vk_ii bigf ii in
+ ts +> List.iter (fun (ini,iicomma) ->
+ vk_ini bigf ini;
+ iif iicomma;
+ )
and vk_designator = fun bigf design ->
let iif ii = vk_ii bigf ii in
| DefineText (s, ii) -> vk_ii bigf ii
| DefineEmpty -> ()
| DefineInit ini -> vk_ini bigf ini
-
+ (* christia: added multi *)
+ | DefineMulti stmts ->
+ List.fold_left (fun () d -> vk_statement bigf d) () stmts
| DefineTodo ->
pr2_once "DefineTodo";
()
iif ii;
vk_expr bigf e
- | F.ForHeader (_st, (((e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) ->
+ | F.ForHeader (_st, ((ForExp (e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) ->
iif i1; iif i2; iif i3;
iif ii;
e1opt +> do_option (vk_expr bigf);
e2opt +> do_option (vk_expr bigf);
e3opt +> do_option (vk_expr bigf);
+ | F.ForHeader (_st, ((ForDecl decl, (e2opt,i2), (e3opt,i3)), ii)) ->
+ iif i2; iif i3;
+ iif ii;
+ decl +> (vk_decl bigf);
+ e2opt +> do_option (vk_expr bigf);
+ e3opt +> do_option (vk_expr bigf);
| F.MacroIterHeader (_s, ((s,es), ii)) ->
iif ii;
vk_argument_list bigf es;
StatementExpr (
vk_statement_sequencable_list_s bigf statxs,
iif is)
- | Constructor (t, initxs) ->
- Constructor
- (vk_type_s bigf t,
- (initxs +> List.map (fun (ini, ii) ->
- vk_ini_s bigf ini, vk_ii_s bigf ii)
- ))
+ | Constructor (t, init) ->
+ Constructor (vk_type_s bigf t, vk_ini_s bigf init)
| 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)
Iteration (While ((vk_expr_s bigf) e, statf st))
| Iteration (DoWhile (st, e)) ->
Iteration (DoWhile (statf st, (vk_expr_s bigf) e))
- | Iteration (For ((e1opt,i1), (e2opt,i2), (e3opt,i3), st)) ->
- let e1opt' = statf (mk_st (ExprStatement (e1opt)) i1) in
+ | Iteration (For (first, (e2opt,i2), (e3opt,i3), st)) ->
+ let first =
+ match first with
+ ForExp (e1opt,i1) ->
+ let e1opt' = statf (mk_st (ExprStatement (e1opt)) i1) in
+ let e1' = Ast_c.unwrap_st e1opt' in
+ let i1' = Ast_c.get_ii_st_take_care e1opt' in
+ (match e1' with
+ ExprStatement x1 -> ForExp (x1,i1')
+ | _ ->
+ failwith
+ "cant be here if iterator keep ExprStatement as is")
+ | ForDecl decl -> ForDecl (vk_decl_s bigf decl) in
let e2opt' = statf (mk_st (ExprStatement (e2opt)) i2) in
let e3opt' = statf (mk_st (ExprStatement (e3opt)) i3) in
- let e1' = Ast_c.unwrap_st e1opt' in
let e2' = Ast_c.unwrap_st e2opt' in
let e3' = Ast_c.unwrap_st e3opt' in
- let i1' = Ast_c.get_ii_st_take_care e1opt' in
let i2' = Ast_c.get_ii_st_take_care e2opt' in
let i3' = Ast_c.get_ii_st_take_care e3opt' in
- (match (e1', e2', e3') with
- | ((ExprStatement x1), (ExprStatement x2), ((ExprStatement x3))) ->
- Iteration (For ((x1,i1'), (x2,i2'), (x3,i3'), statf st))
+ (match (e2', e3') with
+ | ((ExprStatement x2), ((ExprStatement x3))) ->
+ Iteration (For (first, (x2,i2'), (x3,i3'), statf st))
| x -> failwith "cant be here if iterator keep ExprStatement as is"
)
match decl with
| DeclList (xs, ii) ->
DeclList (List.map aux xs, iif ii)
- | MacroDecl ((s, args),ii) ->
+ | MacroDecl ((s, args, ptvg),ii) ->
MacroDecl
((s,
- args +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii)
- ),
+ args +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii),
+ ptvg),
+ iif ii)
+ | MacroDeclInit ((s, args, ini),ii) ->
+ MacroDeclInit
+ ((s,
+ args +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii),
+ vk_ini_s bigf ini),
iif ii)
{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;
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 =
| DefineText (s, ii) -> DefineText (s, iif ii)
| DefineEmpty -> DefineEmpty
| DefineInit ini -> DefineInit (vk_ini_s bigf ini)
+ (* christia: added multi *)
+ | DefineMulti ds ->
+ DefineMulti (List.map (vk_statement_s bigf) ds)
| DefineTodo ->
pr2_once "DefineTodo";
| F.DoWhileTail (e,ii) ->
F.DoWhileTail (vk_expr_s bigf e, iif ii)
- | F.ForHeader (st, (((e1opt,i1), (e2opt,i2), (e3opt,i3)), ii)) ->
+ | F.ForHeader (st, ((first, (e2opt,i2), (e3opt,i3)), ii)) ->
+ let first =
+ match first with
+ ForExp (e1opt,i1) ->
+ ForExp (e1opt +> Common.map_option (vk_expr_s bigf), iif i1)
+ | ForDecl decl -> ForDecl (vk_decl_s bigf decl) in
+
F.ForHeader (st,
- (((e1opt +> Common.map_option (vk_expr_s bigf), iif i1),
+ ((first,
(e2opt +> Common.map_option (vk_expr_s bigf), iif i2),
(e3opt +> Common.map_option (vk_expr_s bigf), iif i3)),
iif ii))
let iif ii = vk_ii_s bigf ii in
args +> List.map (fun (e, ii) -> vk_argument_s bigf e, iif ii)
+let vk_inis_s = fun bigf inis ->
+ let iif ii = vk_ii_s bigf ii in
+ inis +> List.map (fun (e, ii) -> vk_ini_s bigf e, iif ii)
+
let vk_params_s = fun bigf args ->
let iif ii = vk_ii_s bigf ii in
args +> List.map (fun (p,ii) -> vk_param_s bigf p, iif ii)