method private postaction_lval lv =
match lv with
| Var _, NoOffset -> lv
| Var _, _ ->
assert false
| Mem e, NoOffset ->
begin match self#wrap_type_if_needed (typeOf e) with
| Some newtyp ->
let newfi = get_unique_field (pointed_type newtyp) in
let newlv = Mem e, Field (newfi, NoOffset) in
newlv
| None -> lv
end
| Mem e, (Index(ie,_) as off) ->
if is_last_offset off then
match self#wrap_type_if_needed (typeOf e) with
| Some newtyp ->
let newfi = get_unique_field (pointed_type newtyp) in
let newlv =
if is_array_reference_type newtyp then
lv
else
Mem(new_exp(BinOp(PlusPI,e,ie,newtyp))), NoOffset
in
let newlv = addOffsetLval (Field (newfi, NoOffset)) newlv in
newlv
| None -> lv
else lv
| Mem _, Field _ -> lv