@@ -845,23 +845,25 @@ end = struct
845845 end
846846
847847 (* Find the first generic occurring in [ty] with a rank higher than [rank] *)
848- let find_higher_rank_generic env subtype_env ty rank =
848+ let check_rank env subtype_env ty rank =
849849 (* To avoid this potentially expensive check we record when the sub- or
850850 supertype _may_ contain a higher rank type parameter. *)
851851 if Subtype_env. get_check_rank subtype_env then
852852 let p ty =
853853 match get_node ty with
854854 | Tgeneric name -> Env. rank_of_tparam env name > rank
855+ | Tvar tv -> Env. rank_of_tvar env tv > rank
855856 | _ -> false
856857 in
857858 let ty_opt = Typing_defs_core. find_locl_ty ty ~p in
858859 Option. map ty_opt ~f: (fun ty ->
859860 match deref ty with
860- | (r , Tgeneric name ) -> (r, name)
861+ | (r , Tgeneric name ) -> (r, Some name)
862+ | (r , Tvar _ ) -> (r, None )
861863 | _ ->
862864 (* We are guaranteed that if the result if [Some(...)] then the type
863865 is a [Tgeneric] so something is seriously wrong here *)
864- failwith " find_higher_rank_generic : unexpected type" )
866+ failwith " check_rank : unexpected type" )
865867 else
866868 None
867869
@@ -1100,7 +1102,7 @@ end = struct
11001102 | (r_sub , Tvar id ) -> begin
11011103 (* Ensure that higher-ranked type parameters don't escape their scope *)
11021104 let tvar_rank = Env. rank_of_tvar env id in
1103- match find_higher_rank_generic env subtype_env ty_super tvar_rank with
1105+ match check_rank env subtype_env ty_super tvar_rank with
11041106 | Some (generic_reason , generic_name ) ->
11051107 let error =
11061108 Typing_error.Secondary. Higher_rank_tparam_escape
@@ -1195,7 +1197,7 @@ end = struct
11951197 tvar_pos = Typing_reason. to_pos r_super;
11961198 pos_with_generic = Typing_reason. to_pos r_generic;
11971199 generic_reason = r_generic;
1198- generic_name = name_sub;
1200+ generic_name = Some name_sub;
11991201 }
12001202 in
12011203 let fail = Subtype_env. fail_with_secondary_error subtype_env error in
@@ -3403,7 +3405,7 @@ end = struct
34033405 (r_super, Tvar var_super_id) ) -> begin
34043406 (* Ensure that higher-ranked type parameters don't escape their scope *)
34053407 let tvar_rank = Env. rank_of_tvar env var_super_id in
3406- match find_higher_rank_generic env subtype_env ty_sub tvar_rank with
3408+ match check_rank env subtype_env ty_sub tvar_rank with
34073409 | Some (generic_reason , generic_name ) ->
34083410 let error =
34093411 Typing_error.Secondary. Higher_rank_tparam_escape
@@ -4060,7 +4062,7 @@ end = struct
40604062 tvar_pos = Typing_reason. to_pos r_sub;
40614063 pos_with_generic = Typing_reason. to_pos r_super;
40624064 generic_reason = r_super;
4063- generic_name = tp_sup;
4065+ generic_name = Some tp_sup;
40644066 }
40654067 in
40664068 let fail = Subtype_env. fail_with_secondary_error subtype_env error in
@@ -9034,7 +9036,7 @@ end = struct
90349036 tvar_pos = Typing_reason. to_pos r_super;
90359037 pos_with_generic = Typing_reason. to_pos r_generic;
90369038 generic_reason = r_generic;
9037- generic_name = nm;
9039+ generic_name = Some nm;
90389040 }
90399041 in
90409042 let fail = Subtype_env. fail_with_secondary_error subtype_env error in
0 commit comments