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)