@@ -63,19 +63,18 @@ let filter_mem mem name entry =
63
63
not (String. (name = n) || Block. (entry = e)))
64
64
65
65
let filter_callees name addr =
66
- Map. filter ~f: (function
67
- | Some a , Some n -> Addr. (addr <> a) && String. (name <> n)
68
- | Some a , _ -> Addr. (addr <> a)
69
- | _ , Some n -> String. (name <> n)
70
- | _ -> true )
66
+ let filter = function
67
+ | Func name' -> String. (name <> name')
68
+ | Fall addr' -> Addr. (addr <> addr') in
69
+ Map. map ~f: (fun xs -> List. filter xs ~f: filter)
71
70
72
71
let remove t (name ,entry ,_ ) : t =
73
72
if Map. mem t.addrs (Block. addr entry) then
74
73
{
75
74
names = Map. remove t.names name;
76
75
addrs = Map. remove t.addrs (Block. addr entry);
77
76
memory = filter_mem t.memory name entry;
78
- callees = Map. remove t.callees (Block. addr entry);
77
+ callees = filter_callees name (Block. addr entry) t.callees ;
79
78
}
80
79
else t
81
80
@@ -104,21 +103,16 @@ let name_of_fn = fst
104
103
let entry_of_fn = snd
105
104
let span fn = span fn |> Memmap. map ~f: (fun _ -> () )
106
105
107
- let add_call_name t b name =
106
+ let add_callee t b callee =
108
107
let callees =
109
108
Map. update t.callees (Block. addr b)
110
109
~f: (function
111
- | None -> [Func name ]
112
- | Some cs -> Func name :: cs) in
110
+ | None -> [callee ]
111
+ | Some cs -> callee :: cs) in
113
112
{t with callees}
114
113
115
- let add_fall_addr t b addr =
116
- let callees =
117
- Map. update t.callees (Block. addr b)
118
- ~f: (function
119
- | None -> [Fall addr]
120
- | Some cs -> Fall addr :: cs) in
121
- {t with callees}
114
+ let add_call_name t b name = add_callee t b (Func name)
115
+ let add_fall_addr t b addr = add_callee t b (Fall addr)
122
116
123
117
let find_map_callee t addr ~f =
124
118
match Map. find t.callees addr with
0 commit comments