@@ -176,7 +176,8 @@ type preenv = {
176176 env_comps : mc Mip .t ;
177177 env_locals : (EcIdent .t * EcTypes .ty ) MMsym .t ;
178178 env_memories : EcMemory .memtype Mmem .t ;
179- env_actmem : EcMemory .memory option ;
179+ env_actmem_ss : EcMemory .memory option ;
180+ env_actmem_ts : (EcMemory .memory * EcMemory .memory ) option ;
180181 env_abs_st : EcModules .abs_uses Mid .t ;
181182 env_tci : ((ty_params * ty ) * tcinstance ) list ;
182183 env_tc : TC .graph ;
@@ -305,7 +306,8 @@ let empty gstate =
305306 env_comps = Mip. singleton (IPPath path) (empty_mc None );
306307 env_locals = MMsym. empty;
307308 env_memories = Mmem. empty;
308- env_actmem = None ;
309+ env_actmem_ss= None ;
310+ env_actmem_ts= None ;
309311 env_abs_st = Mid. empty;
310312 env_tci = [] ;
311313 env_tc = TC.Graph. empty;
@@ -1258,18 +1260,36 @@ module Memory = struct
12581260 try Some (Mmem. bysym me env.env_memories)
12591261 with Not_found -> None
12601262
1261- let set_active (me : memory ) (env : env ) =
1263+ let set_active_ss (me : memory ) (env : env ) =
12621264 match byid me env with
12631265 | None -> raise (MEError (UnknownMemory (`Memory me)))
1264- | Some _ -> { env with env_actmem = Some me }
1266+ | Some _ -> { env with env_actmem_ss = Some me }
12651267
1266- let get_active (env : env ) =
1267- env.env_actmem
1268+ let get_active_ss (env : env ) =
1269+ env.env_actmem_ss
12681270
1269- let current (env : env ) =
1270- match env.env_actmem with
1271+ let current_ss (env : env ) =
1272+ match env.env_actmem_ss with
12711273 | None -> None
12721274 | Some me -> byid me env
1275+
1276+ let set_active_ts (ml : memory ) (mr : memory ) (env : env ) =
1277+ match byid ml env, byid mr env with
1278+ | None , _ -> raise (MEError (UnknownMemory (`Memory ml)))
1279+ | _ , None -> raise (MEError (UnknownMemory (`Memory mr)))
1280+ | Some _ , Some _ ->
1281+ { env with env_actmem_ts = Some (ml, mr) }
1282+
1283+ let get_active_ts (env : env ) =
1284+ env.env_actmem_ts
1285+
1286+ let current_ts (env : env ) =
1287+ match env.env_actmem_ts with
1288+ | None -> None
1289+ | Some (ml , mr ) ->
1290+ match byid ml env, byid mr env with
1291+ | Some mel , Some mer -> Some (mel, mer)
1292+ | _ -> None
12731293
12741294 let update (me : EcMemory.memenv ) (env : env ) =
12751295 { env with env_memories = Mmem. add (fst me) (snd me) env.env_memories; }
@@ -1284,10 +1304,14 @@ module Memory = struct
12841304 (fun env m -> push m env)
12851305 env memenvs
12861306
1287- let push_active memenv env =
1288- set_active (EcMemory. memory memenv)
1307+ let push_active_ss memenv env =
1308+ set_active_ss (EcMemory. memory memenv)
12891309 (push memenv env)
12901310
1311+ let push_active_ts mel mer env =
1312+ set_active_ts (EcMemory. memory mel) (EcMemory. memory mer)
1313+ (push mer (push mel env))
1314+
12911315end
12921316
12931317(* -------------------------------------------------------------------- *)
@@ -1690,15 +1714,15 @@ module Fun = struct
16901714
16911715 let inv_memenv1 env =
16921716 let mem = EcMemory. abstract EcCoreFol. mhr in
1693- Memory. push_active mem env
1717+ Memory. push_active_ss mem env
16941718
16951719 let prF_memenv m path env =
16961720 let fun_ = by_xpath path env in
16971721 actmem_post m fun_
16981722
16991723 let prF path env =
17001724 let post = prF_memenv EcCoreFol. mhr path env in
1701- Memory. push_active post env
1725+ Memory. push_active_ss post env
17021726
17031727 let hoareF_memenv mem path env =
17041728 let (ip, _) = oget (ipath_of_xpath path) in
@@ -1709,12 +1733,12 @@ module Fun = struct
17091733
17101734 let hoareF mem path env =
17111735 let pre, post = hoareF_memenv mem path env in
1712- Memory. push_active pre env, Memory. push_active post env
1736+ Memory. push_active_ss pre env, Memory. push_active_ss post env
17131737
17141738 let hoareS mem path env =
17151739 let fun_ = by_xpath path env in
17161740 let fd, memenv = actmem_body mem fun_ in
1717- memenv, fd, Memory. push_active memenv env
1741+ memenv, fd, Memory. push_active_ss memenv env
17181742
17191743 let equivF_memenv ml mr path1 path2 env =
17201744 let (ip1, _) = oget (ipath_of_xpath path1) in
@@ -3588,8 +3612,11 @@ module LDecl = struct
35883612 let fresh_ids hyps s = snd (fresh_ids (tohyps hyps) s)
35893613
35903614 (* ------------------------------------------------------------------ *)
3591- let push_active m lenv =
3592- { lenv with le_env = Memory. push_active m lenv.le_env }
3615+ let push_active_ss m lenv =
3616+ { lenv with le_env = Memory. push_active_ss m lenv.le_env }
3617+
3618+ let push_active_ts ml mr lenv =
3619+ { lenv with le_env = Memory. push_active_ts ml mr lenv.le_env }
35933620
35943621 let push_all l lenv =
35953622 { lenv with le_env = Memory. push_all l lenv.le_env }
0 commit comments