[clang frontend] Cleanup CAst_utils

Reviewed By: jvillard

Differential Revision: D4689400

fbshipit-source-id: ced8457
master
Andrzej Kotulski 8 years ago committed by Facebook Github Bot
parent 6e84a4b3cb
commit f4c424b4cc

@ -135,7 +135,6 @@ let binary_operation_instruction boi e1 typ e2 loc rhs_owning_method =
(Exp.minus_one, []) (Exp.minus_one, [])
let unary_operation_instruction translation_unit_context uoi e typ loc = let unary_operation_instruction translation_unit_context uoi e typ loc =
let uok = Clang_ast_j.string_of_unary_operator_kind (uoi.Clang_ast_t.uoi_kind) in
let un_exp op = let un_exp op =
Exp.UnOp(op, e, Some typ) in Exp.UnOp(op, e, Some typ) in
match uoi.Clang_ast_t.uoi_kind with match uoi.Clang_ast_t.uoi_kind with
@ -176,6 +175,7 @@ let unary_operation_instruction translation_unit_context uoi e typ loc =
(e, []) (e, [])
| `AddrOf -> (e, []) | `AddrOf -> (e, [])
| `Real | `Imag | `Extension | `Coawait -> | `Real | `Imag | `Extension | `Coawait ->
let uok = Clang_ast_j.string_of_unary_operator_kind (uoi.Clang_ast_t.uoi_kind) in
Logging.out Logging.out
"\nWARNING: Missing translation for Unary Operator Kind %s. The construct has been ignored...\n" uok; "\nWARNING: Missing translation for Unary Operator Kind %s. The construct has been ignored...\n" uok;
(e, []) (e, [])

@ -17,45 +17,6 @@ module F = Format
type type_ptr_to_sil_type = Tenv.t -> Clang_ast_t.type_ptr -> Typ.t type type_ptr_to_sil_type = Tenv.t -> Clang_ast_t.type_ptr -> Typ.t
let string_of_decl decl =
let name = Clang_ast_proj.get_decl_kind_string decl in
let info = Clang_ast_proj.get_decl_tuple decl in
Printf.sprintf "<\"%s\"> '%d'" name info.Clang_ast_t.di_pointer
let string_of_unary_operator_kind = function
| `PostInc -> "PostInc"
| `PostDec -> "PostDec"
| `PreInc -> "PreInc"
| `PreDec -> "PreDec"
| `AddrOf -> "AddrOf"
| `Deref -> "Deref"
| `Plus -> "Plus"
| `Minus -> "Minus"
| `Not -> "Not"
| `LNot -> "LNot"
| `Real -> "Real"
| `Imag -> "Imag"
| `Extension -> "Extension"
| `Coawait -> "Coawait"
let string_of_stmt stmt =
let name = Clang_ast_proj.get_stmt_kind_string stmt in
let info, _ = Clang_ast_proj.get_stmt_tuple stmt in
Printf.sprintf "<\"%s\"> '%d'" name info.Clang_ast_t.si_pointer
let get_stmts_from_stmt stmt =
let open Clang_ast_t in
match stmt with
| OpaqueValueExpr (_, lstmt, _, opaque_value_expr_info) ->
(match opaque_value_expr_info.Clang_ast_t.ovei_source_expr with
| Some stmt -> lstmt @ [stmt]
| _ -> lstmt)
(* given that this has not been translated, looking up for variables *)
(* inside leads to inconsistencies *)
| ObjCAtCatchStmt _ ->
[]
| _ -> snd (Clang_ast_proj.get_stmt_tuple stmt)
let fold_qual_name qual_name_list = let fold_qual_name qual_name_list =
match qual_name_list with match qual_name_list with
| [] -> "" | [] -> ""
@ -88,44 +49,6 @@ let make_qual_name_decl class_name_quals name = {
ni_qual_name = name :: class_name_quals; ni_qual_name = name :: class_name_quals;
} }
let property_name property_impl_decl_info =
let no_property_name = make_name_decl "WARNING_NO_PROPERTY_NAME" in
match property_impl_decl_info.Clang_ast_t.opidi_property_decl with
| Some decl_ref ->
(match decl_ref.Clang_ast_t.dr_name with
| Some n -> n
| _ -> no_property_name)
| None -> no_property_name
let generated_ivar_name property_name =
match property_name.Clang_ast_t.ni_qual_name with
| [name; class_name] ->
let ivar_name = "_" ^ name in
{ Clang_ast_t.ni_name = ivar_name;
ni_qual_name = [ivar_name; class_name]
}
| _ -> make_name_decl property_name.Clang_ast_t.ni_name
let get_memory_management_attributes () =
[`Assign; `Retain; `Copy; `Weak; `Strong; `Unsafe_unretained]
let is_retain attribute_opt =
match attribute_opt with
| Some attribute ->
attribute = `Retain || attribute = `Strong
| _ -> false
let is_copy attribute_opt =
match attribute_opt with
| Some attribute ->
attribute = `Copy
| _ -> false
let name_opt_of_name_info_opt name_info_opt =
match name_info_opt with
| Some name_info -> Some (get_qualified_name name_info)
| None -> None
let pointer_counter = ref 0 let pointer_counter = ref 0
let get_fresh_pointer () = let get_fresh_pointer () =

@ -11,27 +11,6 @@ open! IStd
(** Functions for transformations of ast nodes *) (** Functions for transformations of ast nodes *)
val string_of_stmt : Clang_ast_t.stmt -> string
val get_stmts_from_stmt : Clang_ast_t.stmt -> Clang_ast_t.stmt list
val string_of_decl : Clang_ast_t.decl -> string
val string_of_unary_operator_kind : Clang_ast_t.unary_operator_kind -> string
val name_opt_of_name_info_opt : Clang_ast_t.named_decl_info option -> string option
val property_name : Clang_ast_t.obj_c_property_impl_decl_info -> Clang_ast_t.named_decl_info
val generated_ivar_name :
Clang_ast_t.named_decl_info -> Clang_ast_t.named_decl_info
val get_memory_management_attributes : unit -> Clang_ast_t.property_attribute list
val is_retain : Clang_ast_t.property_attribute option -> bool
val is_copy : Clang_ast_t.property_attribute option -> bool
val is_type_nonnull : Clang_ast_t.type_ptr -> bool val is_type_nonnull : Clang_ast_t.type_ptr -> bool
val get_fresh_pointer : unit -> Clang_ast_t.pointer val get_fresh_pointer : unit -> Clang_ast_t.pointer

@ -156,8 +156,18 @@ let rec do_frontend_checks_stmt (context:CLintersContext.context) stmt =
(* ...and here we analyze the stmt inside the if with the context (* ...and here we analyze the stmt inside the if with the context
extended with the condition of the if *) extended with the condition of the if *)
do_all_checks_on_stmts inside_if_stmt_context inside_if_stmt do_all_checks_on_stmts inside_if_stmt_context inside_if_stmt
| OpaqueValueExpr (_, lstmt, _, opaque_value_expr_info) ->
let stmts = (match opaque_value_expr_info.Clang_ast_t.ovei_source_expr with
| Some stmt -> lstmt @ [stmt]
| _ -> lstmt)
in
List.iter ~f:(do_all_checks_on_stmts context) stmts
(* given that this has not been translated, looking up for variables *)
(* inside leads to inconsistencies *)
| ObjCAtCatchStmt _ ->
()
| _ -> | _ ->
let stmts = CAst_utils.get_stmts_from_stmt stmt in let stmts = snd (Clang_ast_proj.get_stmt_tuple stmt) in
List.iter ~f:(do_all_checks_on_stmts context) stmts List.iter ~f:(do_all_checks_on_stmts context) stmts
and do_frontend_checks_decl (context: CLintersContext.context) decl = and do_frontend_checks_decl (context: CLintersContext.context) decl =

@ -126,7 +126,7 @@ struct
| _ -> | _ ->
Logging.out Logging.out
"\nWARNING: found Method Declaration '%s' skipped. NEED TO BE FIXED\n\n" "\nWARNING: found Method Declaration '%s' skipped. NEED TO BE FIXED\n\n"
(CAst_utils.string_of_decl dec); (Clang_ast_proj.get_decl_kind_string dec);
() ()
let process_methods trans_unit_ctx tenv cg cfg curr_class decl_list = let process_methods trans_unit_ctx tenv cg cfg curr_class decl_list =
@ -223,7 +223,7 @@ struct
let curr_class = CContext.ContextClsDeclPtr parent_ptr in let curr_class = CContext.ContextClsDeclPtr parent_ptr in
process_methods trans_unit_ctx tenv cg cfg curr_class [dec] process_methods trans_unit_ctx tenv cg cfg curr_class [dec]
| Some dec -> | Some dec ->
Logging.out "Methods of %s skipped\n" (CAst_utils.string_of_decl dec) Logging.out "Methods of %s skipped\n" (Clang_ast_proj.get_decl_kind_string dec)
| None -> ()) | None -> ())
| VarDecl (decl_info, named_decl_info, qt, ({ vdi_is_global; vdi_init_expr } as vdi)) | VarDecl (decl_info, named_decl_info, qt, ({ vdi_is_global; vdi_init_expr } as vdi))
when vdi_is_global && Option.is_some vdi_init_expr -> when vdi_is_global && Option.is_some vdi_init_expr ->

@ -2587,7 +2587,7 @@ struct
| CXXTryStmt (_, stmts) -> | CXXTryStmt (_, stmts) ->
(Logging.out (Logging.out
"\n!!!!WARNING: found statement %s. \nTranslation need to be improved.... \n" "\n!!!!WARNING: found statement %s. \nTranslation need to be improved.... \n"
(CAst_utils.string_of_stmt instr); (Clang_ast_proj.get_stmt_kind_string instr);
compoundStmt_trans trans_state stmts) compoundStmt_trans trans_state stmts)
| ObjCAtThrowStmt (stmt_info, stmts) | ObjCAtThrowStmt (stmt_info, stmts)
@ -2674,7 +2674,7 @@ struct
| s -> (Logging.out | s -> (Logging.out
"\n!!!!WARNING: found statement %s. \nACTION REQUIRED: \ "\n!!!!WARNING: found statement %s. \nACTION REQUIRED: \
Translation need to be defined. Statement ignored.... \n" Translation need to be defined. Statement ignored.... \n"
(CAst_utils.string_of_stmt s); (Clang_ast_proj.get_stmt_kind_string s);
assert false) assert false)
(* Function similar to instruction function, but it takes C++ constructor initializer as (* Function similar to instruction function, but it takes C++ constructor initializer as

@ -25,7 +25,7 @@ let is_pointer_to_objc_class typ =
let get_super_interface_decl otdi_super = let get_super_interface_decl otdi_super =
match otdi_super with match otdi_super with
| Some dr -> CAst_utils.name_opt_of_name_info_opt dr.Clang_ast_t.dr_name | Some dr -> Option.map ~f:CAst_utils.get_qualified_name dr.Clang_ast_t.dr_name
| _ -> None | _ -> None
let get_protocols protocols = let get_protocols protocols =

Loading…
Cancel
Save