let occurrence_highlighter buffer loc ~start ~stop =
if Enabled.get () then
match !Db.Occurrence.get_last_result () with
| None ->
()
| Some (result, vi) ->
let highlight () =
let tag = make_tag buffer "occurrence" [`BACKGROUND "yellow" ] in
apply_tag buffer tag start stop
in
match loc with
| PLval (_, ki, lval) ->
let same_lval (k, l) = Kinstr.equal k ki && Lval.equal l lval in
if List.exists same_lval result then highlight ()
| PTermLval (_,ki,term_lval) ->
let same_tlval (k, l) =
Logic_utils.is_same_tlval
(Logic_utils.lval_to_term_lval ~cast:true l)
term_lval
&& Kinstr.equal k ki
in
if List.exists same_tlval result then highlight ()
| PVDecl(_, vi') when Varinfo.equal vi vi' ->
highlight ()
| PVDecl _ | PStmt _ | PGlobal _ | PIP _ -> ()