| ParenExpr (e) -> exprf e
+ | New t -> vk_argument bigf t
+ | Delete e -> vk_expr bigf e
+
in exprf expr
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_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
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
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
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) ->
| 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
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)
{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 =
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 ->
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 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)
- )
-
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