+let strip_inh_info_visitor _ = (* for inherited metavariables *)
+ let drop_test_lv ty =
+ let (ty,_) = !ty in
+ let ty =
+ match ty with
+ None -> None
+ | Some (ty,_) -> Some (ty,Ast_c.NotLocalVar) in
+ ref (ty,Ast_c.NotTest) in
+
+ { Visitor_c.default_visitor_c_s with
+ Visitor_c.kinfo_s =
+ (* traversal should be deterministic... *)
+ (let ctr = ref 0 in
+ (function (k,_) ->
+ function i -> ctr := !ctr + 1; Ast_c.al_info_cpp !ctr i));
+
+ Visitor_c.kexpr_s = (fun (k,_) e ->
+ let (e', ty), ii' = k e in
+ (e', drop_test_lv ty), ii' (* keep type - jll *)
+ );
+
+(*
+ Visitor_c.ktype_s = (fun (k,_) ft ->
+ let ft' = k ft in
+ match Ast_c.unwrap_typeC ft' with
+ | Ast_c.TypeName (s,_typ) ->
+ Ast_c.TypeName (s, Ast_c.noTypedefDef()) +> Ast_c.rewrap_typeC ft'
+ | _ -> ft'
+
+ );
+*)
+
+ }
+
+let al_inh_expr x = Visitor_c.vk_expr_s (strip_inh_info_visitor()) x
+let al_inh_declaration x = Visitor_c.vk_decl_s (strip_inh_info_visitor()) x
+let al_inh_field x = Visitor_c.vk_struct_field_s (strip_inh_info_visitor()) x
+let al_inh_field_list x =
+ Visitor_c.vk_struct_fields_s (strip_inh_info_visitor()) x
+let al_inh_statement x = Visitor_c.vk_statement_s (strip_inh_info_visitor()) x
+let al_inh_type x = Visitor_c.vk_type_s (strip_inh_info_visitor()) x
+let al_inh_init x = Visitor_c.vk_ini_s (strip_inh_info_visitor()) x
+let al_inh_arguments x = Visitor_c.vk_arguments_s (strip_inh_info_visitor()) x
+