let rec funvar_offset ~atomic base path offset range =
match offset , range with
| [] , None -> Z.path base path
| [] , Some(te,rg) -> Z.path base (Z.p_interval ~atomic path te rg)
| Lookup.Ofield f :: offset , _ ->
funvar_offset ~atomic base (Z.p_field ~atomic path f) offset range
| Lookup.Oindex(k,te) :: offset , _ ->
funvar_offset ~atomic base (Z.p_index ~atomic path te ~offset:k) offset range