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) =
KinstrComparable.equal k ki && Cilutil.equals 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 l)
term_lval
&& KinstrComparable.equal k ki
in
if List.exists same_tlval result then highlight ()
| PVDecl(_, vi') when VarinfoComparable.equal vi vi' ->
highlight ()
| PVDecl _ | PStmt _ | PCodeAnnot _ | PGlobal _
| PBehavior _ | PPredicate _ ->
()