let pretty_lval_or_absolute (annot : GText.buffer) ki lva =
begin
annot#insert "Before statement:\n";
let state = Value.get_state ki in
try
let offsetmap = lval_or_absolute_to_offsetmap state lva in
annot#insert (Pretty_utils.sfprintf "%a@\n"
(pretty_offsetmap lva) offsetmap);
with Lmap.Cannot_copy ->
match lva with
| LVal lv ->
let value = !Db.Value.access ki lv in
let inset_utf8 = Unicode.inset_string () in
annot#insert (Pretty_utils.sfprintf "%a %s %a@\n"
!Ast_printer.d_lval lv
inset_utf8
Db.Value.pretty value)
| AbsoluteMem -> annot#insert "<>"
end;
begin
if Value_parameters.ResultsAfter.get () then
match ki with
| Kstmt ({ skind = Instr _} as stmt) ->
let state =
try Value.AfterTable.find stmt
with Not_found -> Cvalue.Model.bottom
in
let offsetmap_after = lval_or_absolute_to_offsetmap state lva in
annot#insert (Pretty_utils.sfprintf "After statement:\n%a\n"
(pretty_offsetmap lva) offsetmap_after);
| Kglobal | Kstmt _ -> ()
else
try
(match lva with
| LVal lv ->
let offsetmap_after = !Db.Value.lval_to_offsetmap_after ki lv in
annot#insert (Pretty_utils.sfprintf "At next statement:@\n%a@\n"
(pretty_offsetmap lva) offsetmap_after)
| AbsoluteMem -> ())
with Not_found -> ()
end