|
@@ -1149,14 +1149,11 @@ let match_expr ctx e cases def with_type p =
|
|
let monos = List.map (fun _ -> mk_mono()) ctx.type_params in
|
|
let monos = List.map (fun _ -> mk_mono()) ctx.type_params in
|
|
let t = apply_params ctx.type_params monos t in
|
|
let t = apply_params ctx.type_params monos t in
|
|
let pl = [add_pattern_locals (to_pattern ctx ep t)] in
|
|
let pl = [add_pattern_locals (to_pattern ctx ep t)] in
|
|
- (* we add a constraint to the context type parameters to allow some expressions like binops *)
|
|
|
|
- let restore = List.map2 (fun (n,tp) t -> match follow tp with
|
|
|
|
- | TInst({cl_kind = (KTypeParameter pl as kt)} as c,_) ->
|
|
|
|
- let restore = fun () -> c.cl_kind <- kt in
|
|
|
|
- c.cl_kind <- KTypeParameter (pl @ [t]);
|
|
|
|
- restore
|
|
|
|
- | _ -> assert false) ctx.type_params monos
|
|
|
|
- in
|
|
|
|
|
|
+ let restore = PMap.fold (fun v acc ->
|
|
|
|
+ let t = v.v_type in
|
|
|
|
+ v.v_type <- apply_params ctx.type_params monos v.v_type;
|
|
|
|
+ (fun () -> v.v_type <- t) :: acc
|
|
|
|
+ ) ctx.locals [] in
|
|
pl,restore,(match with_type with
|
|
pl,restore,(match with_type with
|
|
| WithType t -> WithType (apply_params ctx.type_params monos t)
|
|
| WithType t -> WithType (apply_params ctx.type_params monos t)
|
|
| WithTypeResume t -> WithTypeResume (apply_params ctx.type_params monos t)
|
|
| WithTypeResume t -> WithTypeResume (apply_params ctx.type_params monos t)
|