@ -19,22 +19,14 @@ let add_predefined_objc_types tenv =
let add_predefined_types tenv = add_predefined_objc_types tenv
let create_c_record_typename opt_type =
match opt_type with
| ` Type s
-> (
let buf = Str . split ( Str . regexp " [ \t ]+ " ) s in
match buf with
| " struct " :: _
-> Typ . Name . C . from_qual_name
| " class " :: _
-> Typ . Name . Cpp . from_qual_name Typ . NoTemplate
| " union " :: _
-> Typ . Name . C . union_from_qual_name
| _
-> Typ . Name . C . from_qual_name )
| _
-> assert false
let create_c_record_typename ( tag_kind : Clang_ast_t . tag_kind ) =
match tag_kind with
| ` TTK_Struct | ` TTK_Interface | ` TTK_Enum
-> Typ . Name . C . from_qual_name
| ` TTK_Union
-> Typ . Name . C . union_from_qual_name
| ` TTK_Class
-> Typ . Name . Cpp . from_qual_name Typ . NoTemplate
let get_class_template_name = function
| Clang_ast_t . ClassTemplateDecl ( _ , name_info , _ )
@ -109,9 +101,9 @@ let rec get_struct_fields tenv decl =
let open Clang_ast_t in
let decl_list =
match decl with
| ClassTemplateSpecializationDecl ( _ , _ , _ , _ , decl_list , _ , _ , _ , _ , _ )
| CXXRecordDecl ( _ , _ , _ , _ , decl_list , _ , _ , _ )
| RecordDecl ( _ , _ , _ , _ , decl_list , _ , _ )
| ClassTemplateSpecializationDecl ( _ , _ , _ , decl_list , _ , _ , _ , _ , _ , _ )
| CXXRecordDecl ( _ , _ , _ , decl_list , _ , _ , _ , _ )
| RecordDecl ( _ , _ , _ , decl_list , _ , _ , _ )
-> decl_list
| _
-> []
@ -148,8 +140,8 @@ and get_record_custom_type tenv definition_decl =
and get_record_friend_decl_type tenv definition_decl =
let open Clang_ast_t in
match definition_decl with
| ClassTemplateSpecializationDecl ( _ , _ , _ , _ , decl_list , _ , _ , _ , _ , _ )
| CXXRecordDecl ( _ , _ , _ , _ , decl_list , _ , _ , _ )
| ClassTemplateSpecializationDecl ( _ , _ , _ , decl_list , _ , _ , _ , _ , _ , _ )
| CXXRecordDecl ( _ , _ , _ , decl_list , _ , _ , _ , _ )
-> Option . map ~ f : ( qual_type_to_sil_type tenv ) ( get_translate_as_friend_decl decl_list )
| _
-> None
@ -178,8 +170,8 @@ and get_record_typename ?tenv decl =
let open Clang_ast_t in
let linters_mode = match tenv with Some _ -> false | None -> true in
match ( decl , tenv ) with
| RecordDecl ( _ , name_info , opt_type , _ , _ , _ , _ ) , _
-> CAst_utils . get_qualified_name ~ linters_mode name_info | > create_c_record_typename opt_type
| RecordDecl ( _ , name_info , _ , _ , _ , tag_kind , _ ) , _
-> CAst_utils . get_qualified_name ~ linters_mode name_info | > create_c_record_typename tag_kind
| ClassTemplateSpecializationDecl ( _ , _ , _ , _ , _ , _ , _ , _ , mangling , spec_info ) , Some tenv
-> let tname =
match CAst_utils . get_decl spec_info . tsi_template_decl with
@ -220,9 +212,9 @@ and get_superclass_list_cpp tenv decl =
and get_record_struct_type tenv definition_decl : Typ . desc =
let open Clang_ast_t in
match definition_decl with
| ClassTemplateSpecializationDecl ( _ , _ , _ , type_ptr , _ , _ , record_decl_info , _ , _ , _ )
| CXXRecordDecl ( _ , _ , _ , type_ptr , _ , _ , record_decl_info , _ )
| RecordDecl ( _ , _ , _ , type_ptr , _ , _ , record_decl_info )
| ClassTemplateSpecializationDecl ( _ , _ , type_ptr , _ , _ , _ , record_decl_info , _ , _ , _ )
| CXXRecordDecl ( _ , _ , type_ptr , _ , _ , _ , record_decl_info , _ )
| RecordDecl ( _ , _ , type_ptr , _ , _ , _ , record_decl_info )
-> (
let sil_typename = get_record_typename ~ tenv definition_decl in
let sil_desc = Typ . Tstruct sil_typename in