[debug] Print types in access paths/expressions in verbose mode

Reviewed By: ngorogiannis

Differential Revision: D10414234

fbshipit-source-id: ad73c79ab
master
Mehdi Bouaziz 6 years ago committed by Facebook Github Bot
parent 5ee9ea9e48
commit b3cef556b7

@ -92,17 +92,23 @@ let rec get_typ t tenv : Typ.t option =
match base_typ_opt with Some {Typ.desc= Tptr (typ, _)} -> Some typ | _ -> None ) match base_typ_opt with Some {Typ.desc= Tptr (typ, _)} -> Some typ | _ -> None )
let may_pp_typ fmt typ =
if Config.debug_level_analysis >= 3 then F.fprintf fmt ":%a" (Typ.pp Pp.text) typ
let rec pp fmt = function let rec pp fmt = function
| Base (pvar, _) -> | Base (pvar, typ) ->
Var.pp fmt pvar Var.pp fmt pvar ; may_pp_typ fmt typ
| FieldOffset (Dereference ae, fld) -> | FieldOffset (Dereference ae, fld) ->
F.fprintf fmt "%a->%a" pp ae Typ.Fieldname.pp fld F.fprintf fmt "%a->%a" pp ae Typ.Fieldname.pp fld
| FieldOffset (ae, fld) -> | FieldOffset (ae, fld) ->
F.fprintf fmt "%a.%a" pp ae Typ.Fieldname.pp fld F.fprintf fmt "%a.%a" pp ae Typ.Fieldname.pp fld
| ArrayOffset (ae, _, []) -> | ArrayOffset (ae, typ, []) ->
F.fprintf fmt "%a[_]" pp ae F.fprintf fmt "%a[_]%a" pp ae may_pp_typ typ
| ArrayOffset (ae, _, index_aes) -> | ArrayOffset (ae, typ, index_aes) ->
F.fprintf fmt "%a[%a]" pp ae (PrettyPrintable.pp_collection ~pp_item:pp) index_aes F.fprintf fmt "%a[%a]%a" pp ae
(PrettyPrintable.pp_collection ~pp_item:pp)
index_aes may_pp_typ typ
| AddressOf ae -> | AddressOf ae ->
F.fprintf fmt "&(%a)" pp ae F.fprintf fmt "&(%a)" pp ae
| Dereference ae -> | Dereference ae ->

@ -27,15 +27,20 @@ module Raw = struct
let equal_access_list l1 l2 = Int.equal (List.compare compare_access l1 l2) 0 let equal_access_list l1 l2 = Int.equal (List.compare compare_access l1 l2) 0
let pp_base fmt (pvar, _) = Var.pp fmt pvar let may_pp_typ fmt typ =
if Config.debug_level_analysis >= 3 then F.fprintf fmt ":%a" (Typ.pp Pp.text) typ
let pp_base fmt (pvar, typ) = Var.pp fmt pvar ; may_pp_typ fmt typ
let rec pp_access fmt = function let rec pp_access fmt = function
| FieldAccess field_name -> | FieldAccess field_name ->
Typ.Fieldname.pp fmt field_name Typ.Fieldname.pp fmt field_name
| ArrayAccess (_, []) -> | ArrayAccess (typ, []) ->
F.pp_print_string fmt "[_]" F.pp_print_string fmt "[_]" ; may_pp_typ fmt typ
| ArrayAccess (_, index_aps) -> | ArrayAccess (typ, index_aps) ->
F.fprintf fmt "[%a]" (PrettyPrintable.pp_collection ~pp_item:pp) index_aps F.fprintf fmt "[%a]" (PrettyPrintable.pp_collection ~pp_item:pp) index_aps ;
may_pp_typ fmt typ
and pp_access_list fmt accesses = and pp_access_list fmt accesses =

Loading…
Cancel
Save