let rec data_load env ty = function
| Loc _ | Data _ | Value _ as d ->
let obj = object_of ty in
Value (M.load (mem_at_env env) obj (loc_of_data obj d))
| Range _ ->
Wp_parameters.not_yet_implemented "load of arbitrary region"
| Set _ ->
Wp_parameters.not_yet_implemented "load of arbitrary sets"
| List pl -> union_map (data_load env ty) pl
| _ -> WpLog.fatal "unexpected argument for [load]"