let rec mk_offset_update texpr env base t_base exp off =
match off with
| NoOffset -> exp
| Field (f, next) ->
let e = M.mk_field_access base f in
let e = mk_offset_update texpr env e (Ctype f.ftype) exp next in
let e = match e with None -> None
| Some e -> Some (M.mk_field_update base f e)
in e
| Index (t,next) ->
match texpr t with
| Some idx ->
let idx = match env with None -> idx
| Some env -> MT.term_at env (LogicLabel "Old") idx Fol.PTint in
let t_elem = Types.ltype_array_elem t_base in
let e = M.mk_index_access base t_elem idx in
let e = mk_offset_update texpr env e t_elem exp next in
let e = match e with None -> None
| Some e -> Some (M.mk_index_update base idx e)
in e
| None -> None