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
+ | 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 -> ()
| BaseType _ -> ()
| Pointer t -> typef t
| Array (eopt, t) ->
)
| Enum (sopt, enumt) ->
- enumt +> List.iter (fun ((name, eopt), iicomma) ->
- vk_name bigf name;
- iif iicomma;
- eopt +> Common.do_option (fun (info, e) ->
- iif [info];
- vk_expr bigf e
- )
- );
+ vk_enum_fields bigf enumt
| StructUnion (sopt, _su, fields) ->
vk_struct_fields bigf fields
let f = bigf.kdecl in
let rec k decl =
match decl with
- | DeclList (xs,ii) -> xs +> List.iter (fun (x,ii) ->
+ | DeclList (xs,ii) ->
+ 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
vk_type bigf t
)
+
+and vk_enum_fields = fun bigf enumt ->
+ let iif ii = vk_ii bigf ii in
+ enumt +> List.iter (fun ((name, eopt), iicomma) ->
+ vk_oneEnum bigf (name, eopt);
+ iif iicomma)
+
+and vk_oneEnum = fun bigf (name, eopt) ->
+ let iif ii = vk_ii bigf ii in
+ vk_name bigf name;
+ eopt +> Common.do_option (fun (info, e) ->
+ iif [info];
+ vk_expr bigf e
+ )
+
(* ------------------------------------------------------------------------ *)
iif ii;
vk_define_kind bigf defkind;
vk_define_val bigf defval
- | Undef (s, ii) ->
- iif ii
| PragmaAndCo (ii) ->
iif ii
in f (k, bigf) directive
vk_ii bigf iis;
vk_ii bigf iicomma;
)
+ | Undef -> ()
and vk_define_val bigf defval =
let f = bigf.kdefineval 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;
pr2_once "DefineTodo";
()
-
| F.Include {i_include = (s, ii);} -> iif ii;
| F.MacroTop (s, args, ii) ->
(* ------------------------------------------------------------------------ *)
-let vk_args_splitted = fun bigf args_splitted ->
+let vk_splitted element = fun bigf args_splitted ->
let iif ii = vk_ii bigf ii in
args_splitted +> List.iter (function
- | Left arg -> vk_argument bigf arg
+ | Left arg -> element bigf arg
| Right ii -> iif ii
)
-
-let vk_define_params_splitted = fun bigf args_splitted ->
- let iif ii = vk_ii bigf ii in
- args_splitted +> List.iter (function
- | Left (s, iis) -> vk_ii bigf iis
- | Right ii -> iif ii
- )
-
-
-
-let vk_params_splitted = fun bigf args_splitted ->
- let iif ii = vk_ii bigf ii in
- args_splitted +> List.iter (function
- | Left arg -> vk_param bigf arg
- | Right ii -> iif ii
- )
+let vk_args_splitted = vk_splitted vk_argument
+let vk_define_params_splitted = vk_splitted (fun bigf (_,ii) -> vk_ii bigf ii)
+let vk_params_splitted = vk_splitted vk_param
+let vk_enum_fields_splitted = vk_splitted vk_oneEnum
+let vk_inis_splitted = vk_splitted vk_ini
(* ------------------------------------------------------------------------ *)
let vk_cst = fun bigf (cst, ii) ->
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)
in exprf expr
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"
)
let (unwrap_t, iit) = t in
let t' =
match unwrap_t with
+ | NoType -> NoType
| BaseType x -> BaseType x
| Pointer t -> Pointer (typef t)
| Array (eopt, t) -> Array (fmap (vk_expr_s bigf) eopt, typef t)
))
| Enum (sopt, enumt) ->
- Enum (sopt,
- enumt +> List.map (fun ((name, eopt), iicomma) ->
-
- ((vk_name_s bigf name,
- eopt +> Common.fmap (fun (info, e) ->
- vk_info_s bigf info,
- vk_expr_s bigf e
- )),
- iif iicomma)
- )
- )
+ Enum (sopt, vk_enum_fields_s bigf enumt)
| StructUnion (sopt, su, fields) ->
StructUnion (sopt, su, vk_struct_fields_s bigf fields)
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 =
), iif iicomma
)
-and vk_struct_fields_s = fun bigf fields ->
-
+and vk_struct_field_s = fun bigf field ->
let iif ii = vk_ii_s bigf ii in
- fields +> List.map (fun (field) ->
- (match field with
- | (DeclarationField (FieldDeclList (onefield_multivars, iiptvirg))) ->
- DeclarationField
- (FieldDeclList
- (vk_struct_fieldkinds_s bigf onefield_multivars, iif iiptvirg))
- | EmptyField info -> EmptyField (vk_info_s bigf info)
- | MacroDeclField ((s, args),ii) ->
- MacroDeclField
- ((s,
- args +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii)
- ),
- iif ii)
+ match field with
+ (DeclarationField (FieldDeclList (onefield_multivars, iiptvirg))) ->
+ DeclarationField
+ (FieldDeclList
+ (vk_struct_fieldkinds_s bigf onefield_multivars, iif iiptvirg))
+ | EmptyField info -> EmptyField (vk_info_s bigf info)
+ | MacroDeclField ((s, args),ii) ->
+ MacroDeclField
+ ((s,
+ args +> List.map (fun (e,ii) -> vk_argument_s bigf e, iif ii)
+ ),
+ iif ii)
+
+ | CppDirectiveStruct directive ->
+ CppDirectiveStruct (vk_cpp_directive_s bigf directive)
+ | IfdefStruct ifdef ->
+ IfdefStruct (vk_ifdef_directive_s bigf ifdef)
- | CppDirectiveStruct directive ->
- CppDirectiveStruct (vk_cpp_directive_s bigf directive)
- | IfdefStruct ifdef ->
- IfdefStruct (vk_ifdef_directive_s bigf ifdef)
+and vk_struct_fields_s = fun bigf fields ->
+ fields +> List.map (vk_struct_field_s bigf)
- )
- )
+and vk_enum_fields_s = fun bigf enumt ->
+ let iif ii = vk_ii_s bigf ii in
+ enumt +> List.map (fun ((name, eopt), iicomma) ->
+ vk_oneEnum_s bigf (name, eopt), iif iicomma)
+and vk_oneEnum_s = fun bigf oneEnum ->
+ let (name,eopt) = oneEnum in
+ (vk_name_s bigf name,
+ eopt +> Common.fmap (fun (info, e) ->
+ vk_info_s bigf info,
+ vk_expr_s bigf e
+ ))
and vk_def_s = fun bigf d ->
let f = bigf.kdef_s in
| Define ((s,ii), (defkind, defval)) ->
Define ((s, iif ii),
(vk_define_kind_s bigf defkind, vk_define_val_s bigf defval))
- | Undef (s, ii) -> Undef (s, iif ii)
| PragmaAndCo (ii) -> PragmaAndCo (iif ii)
in f (k, bigf) top
),
vk_ii_s bigf ii
)
+ | Undef -> Undef
and vk_define_val_s = fun bigf x ->
| 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))
p_type = vk_type_s bigf ft;
}
-let vk_args_splitted_s = fun bigf args_splitted ->
- let iif ii = vk_ii_s bigf ii in
- args_splitted +> List.map (function
- | Left arg -> Left (vk_argument_s bigf arg)
- | Right ii -> Right (iif ii)
- )
-
let vk_arguments_s = fun bigf args ->
let iif ii = vk_ii_s bigf ii in
args +> List.map (fun (e, ii) -> vk_argument_s bigf e, iif ii)
-
-let vk_params_splitted_s = fun bigf args_splitted ->
+let vk_inis_s = fun bigf inis ->
let iif ii = vk_ii_s bigf ii in
- args_splitted +> List.map (function
- | Left arg -> Left (vk_param_s bigf arg)
- | Right ii -> Right (iif ii)
- )
+ 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)
-let vk_define_params_splitted_s = fun bigf args_splitted ->
- let iif ii = vk_ii_s bigf ii in
- args_splitted +> List.map (function
- | Left (s, iis) -> Left (s, vk_ii_s bigf iis)
- | Right ii -> Right (iif ii)
- )
-
let vk_cst_s = fun bigf (cst, ii) ->
let iif ii = vk_ii_s bigf ii in
(match cst with
| Left cst -> Left cst
| Right s -> Right s
), iif ii
+
+(* ------------------------------------------------------------------------ *)
+
+let vk_splitted_s element = fun bigf args_splitted ->
+ let iif ii = vk_ii_s bigf ii in
+ args_splitted +> List.map (function
+ | Left arg -> Left (element bigf arg)
+ | Right ii -> Right (iif ii)
+ )
+
+let vk_args_splitted_s = vk_splitted_s vk_argument_s
+let vk_params_splitted_s = vk_splitted_s vk_param_s
+let vk_define_params_splitted_s =
+ vk_splitted_s (fun bigf (s,ii) -> (s,vk_ii_s bigf ii))
+let vk_enum_fields_splitted_s = vk_splitted_s vk_oneEnum_s
+let vk_inis_splitted_s = vk_splitted_s vk_ini_s