Skip to content

Commit 7f7397a

Browse files
dotnet-botforki
andauthored
Reduce number of typeEquiv checks (#10324) (#10373)
Co-authored-by: Steffen Forkmann <[email protected]>
1 parent 8d1e29e commit 7f7397a

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/fsharp/CheckDeclarations.fs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,7 +2359,7 @@ let TcMutRecDefns_Phase2 (cenv: cenv) envInitial bindsm scopem mutRecNSInfo (env
23592359
let interfacesFromTypeDefn envForTycon tyconMembersData =
23602360
let (MutRecDefnsPhase2DataForTycon(_, _, declKind, tcref, _, _, declaredTyconTypars, members, _, _, _)) = tyconMembersData
23612361
let overridesOK = DeclKind.CanOverrideOrImplement declKind
2362-
members |> List.collect (function
2362+
members |> List.collect (function
23632363
| SynMemberDefn.Interface(ity, defnOpt, _) ->
23642364
let _, ty = if tcref.Deref.IsExceptionDecl then [], g.exn_ty else generalizeTyconRef tcref
23652365
let m = ity.Range
@@ -2373,12 +2373,18 @@ let TcMutRecDefns_Phase2 (cenv: cenv) envInitial bindsm scopem mutRecNSInfo (env
23732373

23742374
if not (tcref.HasInterface g ity') then
23752375
error(Error(FSComp.SR.tcAllImplementedInterfacesShouldBeDeclared(), ity.Range))
2376-
if (typeEquiv g ity' g.mk_IComparable_ty && Option.isSome tcref.GeneratedCompareToValues) ||
2377-
(typeEquiv g ity' g.mk_IStructuralComparable_ty && Option.isSome tcref.GeneratedCompareToWithComparerValues) ||
2378-
(typeEquiv g ity' ((mkAppTy g.system_GenericIComparable_tcref [ty])) && Option.isSome tcref.GeneratedCompareToValues) ||
2379-
(typeEquiv g ity' ((mkAppTy g.system_GenericIEquatable_tcref [ty])) && Option.isSome tcref.GeneratedHashAndEqualsWithComparerValues) ||
2380-
(typeEquiv g ity' g.mk_IStructuralEquatable_ty && Option.isSome tcref.GeneratedHashAndEqualsWithComparerValues) then
2376+
2377+
let generatedCompareToValues = tcref.GeneratedCompareToValues.IsSome
2378+
let generatedHashAndEqualsWithComparerValues = tcref.GeneratedHashAndEqualsWithComparerValues.IsSome
2379+
let generatedCompareToWithComparerValues = tcref.GeneratedCompareToWithComparerValues.IsSome
2380+
2381+
if (generatedCompareToValues && typeEquiv g ity' g.mk_IComparable_ty) ||
2382+
(generatedCompareToWithComparerValues && typeEquiv g ity' g.mk_IStructuralComparable_ty) ||
2383+
(generatedCompareToValues && typeEquiv g ity' ((mkAppTy g.system_GenericIComparable_tcref [ty]))) ||
2384+
(generatedHashAndEqualsWithComparerValues && typeEquiv g ity' ((mkAppTy g.system_GenericIEquatable_tcref [ty]))) ||
2385+
(generatedHashAndEqualsWithComparerValues && typeEquiv g ity' g.mk_IStructuralEquatable_ty) then
23812386
errorR(Error(FSComp.SR.tcDefaultImplementationForInterfaceHasAlreadyBeenAdded(), ity.Range))
2387+
23822388
if overridesOK = WarnOnOverrides then
23832389
warning(IntfImplInIntrinsicAugmentation(ity.Range))
23842390
if overridesOK = ErrorOnOverrides then

0 commit comments

Comments
 (0)