@@ -2576,51 +2576,49 @@ and type_expect_ ?type_clash_context ?in_function ?(recarg=Rejected) env sexp ty
2576
2576
(* Also see PR#7199 for a problem with the following:
2577
2577
let separate = Env.has_local_constraints env in*)
2578
2578
let (arg, ty',cty') =
2579
- match () with
2580
- | () ->
2581
- let (cty', force) =
2582
- Typetexp. transl_simple_type_delayed env sty'
2583
- in
2584
- let ty' = cty'.ctyp_type in
2585
- if separate then begin_def () ;
2586
- let arg = type_exp env sarg in
2587
- let gen =
2588
- if separate then begin
2589
- end_def () ;
2590
- let tv = newvar () in
2591
- let gen = generalizable tv.level arg.exp_type in
2592
- (try unify_var env tv arg.exp_type with Unify trace ->
2593
- raise(Error (arg.exp_loc, env, Expr_type_clash (trace, type_clash_context))));
2594
- gen
2595
- end else true
2596
- in
2597
- begin match arg.exp_desc, ! self_coercion, (repr ty').desc with
2598
- | _ when free_variables ~env arg.exp_type = []
2599
- && free_variables ~env ty' = [] ->
2600
- if not gen && (* first try a single coercion *)
2601
- let snap = snapshot () in
2602
- let ty, _b = enlarge_type env ty' in
2603
- try
2604
- force () ; Ctype. unify env arg.exp_type ty; true
2605
- with Unify _ ->
2606
- backtrack snap; false
2607
- then ()
2608
- else begin try
2609
- let force' = subtype env arg.exp_type ty' in
2610
- force () ; force' () ;
2611
- with Subtype (tr1 , tr2 ) ->
2612
- (* prerr_endline "coercion failed"; *)
2613
- raise(Error (loc, env, Not_subtype (tr1, tr2)))
2614
- end ;
2615
- | _ ->
2616
- let ty, b = enlarge_type env ty' in
2617
- force () ;
2618
- begin try Ctype. unify env arg.exp_type ty with Unify trace ->
2619
- raise(Error (sarg.pexp_loc, env,
2620
- Coercion_failure (ty', full_expand env ty', trace, b)))
2621
- end
2622
- end ;
2623
- (arg, ty', cty')
2579
+ let (cty', force) =
2580
+ Typetexp. transl_simple_type_delayed env sty'
2581
+ in
2582
+ let ty' = cty'.ctyp_type in
2583
+ if separate then begin_def () ;
2584
+ let arg = type_exp env sarg in
2585
+ let gen =
2586
+ if separate then begin
2587
+ end_def () ;
2588
+ let tv = newvar () in
2589
+ let gen = generalizable tv.level arg.exp_type in
2590
+ (try unify_var env tv arg.exp_type with Unify trace ->
2591
+ raise(Error (arg.exp_loc, env, Expr_type_clash (trace, type_clash_context))));
2592
+ gen
2593
+ end else true
2594
+ in
2595
+ begin match arg.exp_desc, ! self_coercion, (repr ty').desc with
2596
+ | _ when free_variables ~env arg.exp_type = []
2597
+ && free_variables ~env ty' = [] ->
2598
+ if not gen && (* first try a single coercion *)
2599
+ let snap = snapshot () in
2600
+ let ty, _b = enlarge_type env ty' in
2601
+ try
2602
+ force () ; Ctype. unify env arg.exp_type ty; true
2603
+ with Unify _ ->
2604
+ backtrack snap; false
2605
+ then ()
2606
+ else begin try
2607
+ let force' = subtype env arg.exp_type ty' in
2608
+ force () ; force' () ;
2609
+ with Subtype (tr1 , tr2 ) ->
2610
+ (* prerr_endline "coercion failed"; *)
2611
+ raise(Error (loc, env, Not_subtype (tr1, tr2)))
2612
+ end ;
2613
+ | _ ->
2614
+ let ty, b = enlarge_type env ty' in
2615
+ force () ;
2616
+ begin try Ctype. unify env arg.exp_type ty with Unify trace ->
2617
+ raise(Error (sarg.pexp_loc, env,
2618
+ Coercion_failure (ty', full_expand env ty', trace, b)))
2619
+ end
2620
+ end ;
2621
+ (arg, ty', cty')
2624
2622
in
2625
2623
rue {
2626
2624
exp_desc = arg.exp_desc;
0 commit comments