let mk_mu m lval =
let rec mk_mu_rec lval = match lval with
| L0addr v -> get_var ~create:true m v ,
(fun obj -> obj), (fun _obj mu -> mu)
| L0depl (lv, d2) ->
let v, f_obj_1, f_mu_of_mu_2 = mk_mu_rec lv in
let f_obj_2 = fun obj_0 -> match d2 with
| Pfield f -> field_access (f_obj_1 obj_0) f
| Pidx i -> D.acc_index (F.unwrap (f_obj_1 obj_0)) i
in
let f_mu_2 = fun obj_0 mu_3 -> match d2 with
| Pfield f ->
F.wrap (D.upd_field (F.unwrap (f_obj_1 obj_0)) f mu_3)
| Pidx i ->
F.wrap (D.upd_index (F.unwrap (f_obj_1 obj_0)) i mu_3)
in
let f_mu_of_mu_3 = fun o mu3 -> f_mu_of_mu_2 o (f_mu_2 o mu3) in
v, f_obj_2, f_mu_of_mu_3
| lval -> unsupported "indirect assignment to %a" pp_loc lval
in mk_mu_rec lval