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