let scope env vars sc wp =
on_context env "scope" wp Keep_opened Keep_assigns
(fun env assigns p ->
let mem = L.mem_at env Clabels.Here in
let wp = WpModel.local_scope mem vars sc p in
begin
match assigns , sc with
| EffectAssigns a , (Mcfg.SC_Block_in | Mcfg.SC_Function_frame) ->
let zs =
List.fold_left
(fun zs x ->
let te = Ctypes.object_of x.vtype in
let ax = F.Aloc(te,WpModel.cvar mem x) in
let zx = WpModel.dzone_assigned mem ax in
WpModel.dzone_union zs zx)
(F.var a.a_locals) vars
in
D.subst a.a_locals zs wp
| _ -> wp
end)