Skip to content

Commit d0a1fbd

Browse files
committed
make differently-sided active memories exclusive
1 parent 9a895b7 commit d0a1fbd

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

src/ecEnv.ml

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ end = struct
167167
}
168168
end
169169

170+
type actmem = [
171+
| `SS of EcMemory.memory
172+
| `TS of EcMemory.memory * EcMemory.memory
173+
]
174+
170175
(* -------------------------------------------------------------------- *)
171176
type preenv = {
172177
env_top : EcPath.path option;
@@ -176,8 +181,7 @@ type preenv = {
176181
env_comps : mc Mip.t;
177182
env_locals : (EcIdent.t * EcTypes.ty) MMsym.t;
178183
env_memories : EcMemory.memtype Mmem.t;
179-
env_actmem_ss: EcMemory.memory option;
180-
env_actmem_ts: (EcMemory.memory * EcMemory.memory) option;
184+
env_actmem : actmem option;
181185
env_abs_st : EcModules.abs_uses Mid.t;
182186
env_tci : ((ty_params * ty) * tcinstance) list;
183187
env_tc : TC.graph;
@@ -306,8 +310,7 @@ let empty gstate =
306310
env_comps = Mip.singleton (IPPath path) (empty_mc None);
307311
env_locals = MMsym.empty;
308312
env_memories = Mmem.empty;
309-
env_actmem_ss= None;
310-
env_actmem_ts= None;
313+
env_actmem = None;
311314
env_abs_st = Mid.empty;
312315
env_tci = [];
313316
env_tc = TC.Graph.empty;
@@ -1260,33 +1263,40 @@ module Memory = struct
12601263
let set_active_ss (me : memory) (env : env) =
12611264
match byid me env with
12621265
| None -> raise (MEError (UnknownMemory (`Memory me)))
1263-
| Some _ -> { env with env_actmem_ss = Some me }
1266+
| Some _ -> { env with env_actmem = Some (`SS me) }
12641267

12651268
let get_active_ss (env : env) =
1266-
env.env_actmem_ss
1269+
match env.env_actmem with
1270+
| Some (`SS me) -> Some me
1271+
| _ -> None
12671272

12681273
let current_ss (env : env) =
1269-
match env.env_actmem_ss with
1270-
| None -> None
1271-
| Some me -> byid me env
1272-
1274+
match env.env_actmem with
1275+
| Some (`SS me) -> byid me env
1276+
| _ -> None
1277+
1278+
12731279
let set_active_ts (ml: memory) (mr: memory) (env : env) =
12741280
match byid ml env, byid mr env with
12751281
| None, _ -> raise (MEError (UnknownMemory (`Memory ml)))
12761282
| _, None -> raise (MEError (UnknownMemory (`Memory mr)))
12771283
| Some _, Some _ ->
1278-
{ env with env_actmem_ts = Some (ml, mr) }
1284+
{ env with env_actmem = Some (`TS (ml, mr)) }
12791285

12801286
let get_active_ts (env : env) =
1281-
env.env_actmem_ts
1287+
match env.env_actmem with
1288+
| Some (`TS (ml, mr)) -> Some (ml, mr)
1289+
| _ -> None
12821290

12831291
let current_ts (env : env) =
1284-
match env.env_actmem_ts with
1285-
| None -> None
1286-
| Some (ml, mr) ->
1292+
match env.env_actmem with
1293+
| Some (`TS (ml, mr)) -> begin
12871294
match byid ml env, byid mr env with
12881295
| Some mel, Some mer -> Some (mel, mer)
12891296
| _ -> None
1297+
end
1298+
| _ -> None
1299+
12901300

12911301
let update (me: EcMemory.memenv) (env : env) =
12921302
{ env with env_memories = Mmem.add (fst me) (snd me) env.env_memories; }

0 commit comments

Comments
 (0)