@@ -27,8 +27,8 @@ type u_value =
2727type umap = u_value Msym .t
2828
2929(* ---------------------------------------------------------------------------------------*)
30- let rec unify_exprs umap e1 e2 =
31- if not (EcTypes. ty_equal e1.e_ty e2.e_ty) then
30+ let rec unify_exprs env umap e1 e2 =
31+ if not (EcReduction.EqTest. for_type env e1.e_ty e2.e_ty) then
3232 raise (UnificationError (UE_TypeMismatch (e1, e2)));
3333
3434 match e1.e_node, e2.e_node with
@@ -59,30 +59,30 @@ let rec unify_exprs umap e1 e2 =
5959 | Eop (p1, _), Eop (p2, _)
6060 when EcPath. p_equal p1 p2 -> umap
6161 | Eapp (f1 , a1 ), Eapp (f2 , a2 ) ->
62- let umap = unify_exprs umap f1 f2 in
62+ let umap = unify_exprs env umap f1 f2 in
6363 if List. length a1 <> List. length a2 then
6464 raise (UnificationError (UE_ExprNotInLockstep (e1, e2)));
65- List. fold_left2 (fun umap e1 e2 -> unify_exprs umap e1 e2) umap a1 a2
65+ List. fold_left2 (fun umap e1 e2 -> unify_exprs env umap e1 e2) umap a1 a2
6666 | Equant (q1 , b1 , e1 ), Equant (q2 , b2 , e2 ) when q1 = q2 ->
6767 if List. length b1 <> List. length b2 then
6868 raise (UnificationError (UE_ExprNotInLockstep (e1, e2)));
69- unify_exprs umap e1 e2
69+ unify_exprs env umap e1 e2
7070 | Elet (_ , e1 , u1 ), Elet (_ , e2 , u2 ) ->
71- let umap = unify_exprs umap e1 e2 in
72- unify_exprs umap u1 u2
71+ let umap = unify_exprs env umap e1 e2 in
72+ unify_exprs env umap u1 u2
7373 | Etuple t1 , Etuple t2 ->
74- List. fold_left (fun umap (e1 , e2 ) -> unify_exprs umap e1 e2) umap (List. combine t1 t2)
74+ List. fold_left (fun umap (e1 , e2 ) -> unify_exprs env umap e1 e2) umap (List. combine t1 t2)
7575 | Eif (c1 , t1 , f1 ), Eif (c2 , t2 , f2 ) ->
76- let umap = unify_exprs umap c1 c2 in
77- let umap = unify_exprs umap t1 t2 in
78- unify_exprs umap f1 f2
76+ let umap = unify_exprs env umap c1 c2 in
77+ let umap = unify_exprs env umap t1 t2 in
78+ unify_exprs env umap f1 f2
7979 | Ematch (c1 , p1 , _ ), Ematch (c2 , p2 , _ ) ->
80- let umap = unify_exprs umap c1 c2 in
80+ let umap = unify_exprs env umap c1 c2 in
8181 if List. length p1 <> List. length p2 then
8282 raise (UnificationError (UE_ExprNotInLockstep (e1, e2)));
83- List. fold_left2 (fun umap e1 e2 -> unify_exprs umap e1 e2) umap p1 p2
83+ List. fold_left2 (fun umap e1 e2 -> unify_exprs env umap e1 e2) umap p1 p2
8484 | Eproj (e1 , x1 ), Eproj (e2 , x2 ) when x1 = x2 ->
85- unify_exprs umap e1 e2
85+ unify_exprs env umap e1 e2
8686 | _ -> raise (UnificationError (UE_ExprNotInLockstep (e1, e2)))
8787
8888(* ---------------------------------------------------------------------------------------*)
@@ -120,12 +120,12 @@ let unify_lv umap lv1 lv2 =
120120 | _ , _ -> raise (UnificationError (UE_LvNotInLockstep (lv1, lv2)))
121121
122122(* ---------------------------------------------------------------------------------------*)
123- let rec unify_instrs umap i1 i2 =
123+ let rec unify_instrs env umap i1 i2 =
124124 match i1.i_node, i2.i_node with
125125 | Sasgn (lv1, e1), Sasgn (lv2, e2)
126126 | Srnd (lv1 , e1 ), Srnd (lv2 , e2 ) ->
127127 let umap = unify_lv umap lv1 lv2 in
128- unify_exprs umap e1 e2
128+ unify_exprs env umap e1 e2
129129
130130 | Scall (olv1 , xp1 , args1 ), Scall (olv2 , xp2 , args2 ) when EcPath. x_equal xp1 xp2 ->
131131 let umap =
@@ -151,37 +151,37 @@ let rec unify_instrs umap i1 i2 =
151151 | _ , _ -> raise (UnificationError (UE_InstrNotInLockstep (i1, i2)))
152152 in
153153
154- List. fold_left (fun umap (e1 , e2 ) -> unify_exprs umap e1 e2) umap (List. combine args1 args2)
154+ List. fold_left (fun umap (e1 , e2 ) -> unify_exprs env umap e1 e2) umap (List. combine args1 args2)
155155
156156 | Sif (e1 , st1 , sf1 ), Sif (e2 , st2 , sf2 ) ->
157- let umap = unify_exprs umap e1 e2 in
158- let umap = unify_stmts umap st1 st2 in
159- unify_stmts umap sf1 sf2
157+ let umap = unify_exprs env umap e1 e2 in
158+ let umap = unify_stmts env umap st1 st2 in
159+ unify_stmts env umap sf1 sf2
160160
161161 | Swhile (e1 , s1 ), Swhile (e2 , s2 ) ->
162- let umap = unify_exprs umap e1 e2 in
163- unify_stmts umap s1 s2
162+ let umap = unify_exprs env umap e1 e2 in
163+ unify_stmts env umap s1 s2
164164
165165 | Smatch (e1 , bs1 ), Smatch (e2 , bs2 ) ->
166- let umap = unify_exprs umap e1 e2 in
166+ let umap = unify_exprs env umap e1 e2 in
167167 List. fold_left2 (fun umap (p1 , b1 ) (p2 , b2 ) ->
168168 if List. length p1 <> List. length p2 then
169169 raise (UnificationError (UE_InstrNotInLockstep (i1, i2)));
170- unify_stmts umap b1 b2
170+ unify_stmts env umap b1 b2
171171 ) umap bs1 bs2
172172
173173 | Sassert e1 , Sassert e2 ->
174- unify_exprs umap e1 e2
174+ unify_exprs env umap e1 e2
175175
176176 | Sabstract x1 , Sabstract x2 when EcIdent. id_equal x1 x2 -> umap
177177
178178 | _ -> raise (UnificationError (UE_InstrNotInLockstep (i1, i2)));
179179
180- and unify_stmts (umap : umap ) s1 s2 =
180+ and unify_stmts env (umap : umap ) s1 s2 =
181181 let s1n, s2n = s1.s_node, s2.s_node in
182182 if List. length s1n <> List. length s2n then
183183 raise (UnificationError (UE_DifferentProgramLengths (s1, s2)));
184- List. fold_left2 (fun umap i1 i2 -> unify_instrs umap i1 i2) umap s1n s2n
184+ List. fold_left2 (fun umap i1 i2 -> unify_instrs env umap i1 i2) umap s1n s2n
185185
186186(* ---------------------------------------------------------------------------------------*)
187187let unify_func env mode fname s =
@@ -209,14 +209,14 @@ let unify_func env mode fname s =
209209
210210 match mode, fdef.f_ret with
211211 | `Exact , None ->
212- let umap = unify_stmts umap fdef.f_body s in
212+ let umap = unify_stmts env umap fdef.f_body s in
213213 s_call (None , fname, close_args umap args)
214214 | `Exact , Some re -> begin
215215 match EcLowPhlGoal. s_last destr_asgn s with
216216 | None -> raise (UnificationError UE_InvalidRetInstr )
217217 | Some ((lv , e ), s ) ->
218- let umap = unify_stmts umap fdef.f_body s in
219- let umap = unify_exprs umap re e in
218+ let umap = unify_stmts env umap fdef.f_body s in
219+ let umap = unify_exprs env umap re e in
220220 let args = close_args umap args in
221221 s_call (Some lv, fname, args)
222222 end
@@ -225,7 +225,7 @@ let unify_func env mode fname s =
225225 | `Alias , Some e ->
226226 if not (is_tuple_var e || is_var e) then
227227 raise (UnificationError UE_AliasNotPv );
228- let umap = unify_stmts umap fdef.f_body s in
228+ let umap = unify_stmts env umap fdef.f_body s in
229229 let args = close_args umap args in
230230 let alias =
231231 let pvs = lv_to_ty_list (lv_of_expr e) in
0 commit comments