Skip to content

Commit

Permalink
temp
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinRansom committed Aug 16, 2024
1 parent 219d3b8 commit bdbd346
Show file tree
Hide file tree
Showing 16 changed files with 113 additions and 122 deletions.
22 changes: 10 additions & 12 deletions src/Compiler/Checking/AugmentWithHashCompare.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,7 @@ type EqualityWithComparerAugmentation =
GetHashCode: Val
GetHashCodeWithComparer: Val
EqualsWithComparer: Val
EqualsExactWithComparer: Val
EqualsWithExactComparer: Val
}

let CheckAugmentationAttribs isImplementation g amap (tycon: Tycon) =
Expand Down Expand Up @@ -1322,7 +1322,7 @@ let MakeValsForCompareWithComparerAugmentation g (tcref: TyconRef) =
let MakeValsForEqualsAugmentation g (tcref: TyconRef) =
let m = tcref.Range
let _, ty = mkMinimalTy g tcref
let vis = tcref.TypeReprAccessibility
let vis = tcref.Accessibility
let tps = tcref.Typars m

let objEqualsVal =
Expand All @@ -1347,14 +1347,13 @@ let MakeValsForEqualsAugmentation g (tcref: TyconRef) =

let MakeValsForEqualityWithComparerAugmentation g (tcref: TyconRef) =
let _, ty = mkMinimalTy g tcref
let vis = tcref.TypeReprAccessibility

let vis = tcref.Accessibility
let tps = tcref.Typars tcref.Range

let objGetHashCodeVal =
mkValSpec g tcref ty vis (Some(mkGetHashCodeSlotSig g)) "GetHashCode" (tps +-> (mkHashTy g ty)) unitArg false

let withcGetHashCodeVal =
let withGetHashCodeVal =
mkValSpec
g
tcref
Expand All @@ -1366,11 +1365,11 @@ let MakeValsForEqualityWithComparerAugmentation g (tcref: TyconRef) =
unaryArg
false

let withcEqualsVal =
let withEqualsVal =
mkValSpec g tcref ty vis (Some(mkIStructuralEquatableEqualsSlotSig g)) "Equals" (tps +-> (mkEqualsWithComparerTy g ty)) tupArg false

let withcEqualsValExactWithComparer =
let vis = TAccess (updateSyntaxAccessForCompPath (tcref.TypeReprAccessibility.CompilationPaths) SyntaxAccess.Public)
let withEqualsWithExactComparer =
let vis = TAccess (updateSyntaxAccessForCompPath (vis.CompilationPaths) SyntaxAccess.Public)
mkValSpec
g
tcref
Expand All @@ -1382,12 +1381,11 @@ let MakeValsForEqualityWithComparerAugmentation g (tcref: TyconRef) =
(tps +-> (mkEqualsWithComparerTyExact g ty))
tupArg
false

{
GetHashCode = objGetHashCodeVal
GetHashCodeWithComparer = withcGetHashCodeVal
EqualsWithComparer = withcEqualsVal
EqualsExactWithComparer = withcEqualsValExactWithComparer
GetHashCodeWithComparer = withGetHashCodeVal
EqualsWithComparer = withEqualsVal
EqualsWithExactComparer = withEqualsWithExactComparer
}

let MakeBindingsForCompareAugmentation g (tycon: Tycon) =
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/Checking/AugmentWithHashCompare.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type EqualityWithComparerAugmentation =
{ GetHashCode: Val
GetHashCodeWithComparer: Val
EqualsWithComparer: Val
EqualsExactWithComparer: Val }
EqualsWithExactComparer: Val }

val CheckAugmentationAttribs: bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit

Expand Down
4 changes: 2 additions & 2 deletions src/Compiler/Checking/CheckDeclarations.fs
Original file line number Diff line number Diff line change
Expand Up @@ -836,12 +836,12 @@ module AddAugmentationDeclarations =
mkLocalValRef augmentation.GetHashCode,
mkLocalValRef augmentation.GetHashCodeWithComparer,
mkLocalValRef augmentation.EqualsWithComparer,
Some (mkLocalValRef augmentation.EqualsExactWithComparer))
Some (mkLocalValRef augmentation.EqualsWithExactComparer))

PublishValueDefn cenv env ModuleOrMemberBinding augmentation.GetHashCode
PublishValueDefn cenv env ModuleOrMemberBinding augmentation.GetHashCodeWithComparer
PublishValueDefn cenv env ModuleOrMemberBinding augmentation.EqualsWithComparer
PublishValueDefnMaybeInclCompilerGenerated cenv env true ModuleOrMemberBinding augmentation.EqualsExactWithComparer
PublishValueDefnMaybeInclCompilerGenerated cenv env true ModuleOrMemberBinding augmentation.EqualsWithExactComparer

let AddGenericCompareBindings (cenv: cenv) (tycon: Tycon) =
if (* AugmentTypeDefinitions.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) Option.isSome tycon.GeneratedCompareToValues then
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/CodeGen/IlxGen.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2212,7 +2212,7 @@ type AnonTypeGenerationTable() =
mkLocalValRef augmentation.GetHashCode,
mkLocalValRef augmentation.GetHashCodeWithComparer,
mkLocalValRef augmentation.EqualsWithComparer,
Some(mkLocalValRef augmentation.EqualsExactWithComparer)
Some(mkLocalValRef augmentation.EqualsWithExactComparer)
)

// Build the ILTypeDef. We don't rely on the normal record generation process because we want very specific field names
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -769,9 +769,7 @@ let main _ =
|> shouldSucceed
|> verifyIL [
"""
.method public specialname static class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2<class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit>
'|IsEqual|IsNonEqual|'<(class [Potato]Potato.Lib/IPotato`1<!!T>) T>(!!T x,
!!T y) cil managed
.method public specialname static class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2<class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> '|IsEqual|IsNonEqual|'<(class [Potato]Potato.Lib/IPotato`1<!!T>) T>(!!T x, !!T y) cil managed
{
.maxstack 8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -871,8 +871,7 @@ let main args =
IL_0002: newobj instance void Foo/StructUnion::.ctor(int32)
IL_0007: ret
}""";(*This is a 'maker method' New{CaseName} used for cases which do have fields associated with them, + the _tag gets initialized*)"""
NewCase3(string _field1_3,
string _field2_3) cil managed
NewCase3(string _field1_3, string _field2_3) cil managed
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags,
int32) = ( 01 00 08 00 00 00 02 00 00 00 00 00 )
Expand Down
16 changes: 4 additions & 12 deletions tests/FSharp.Compiler.ComponentTests/EmittedIL/ByRefTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -283,9 +283,7 @@ type C() =
.get instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute) Test/C::get_X()
}"""

let verifyMethod = """.method public hidebysig specialname
instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute)
get_X() cil managed
let verifyMethod = """.method public hidebysig specialname instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute) get_X() cil managed
{
.param [0]
.custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 )"""
Expand Down Expand Up @@ -313,9 +311,7 @@ type C() =
.get instance int32& modreq([netstandard]System.Runtime.InteropServices.InAttribute) Test/C::get_X()
}"""

let verifyMethod = """.method public hidebysig specialname
instance int32& modreq([netstandard]System.Runtime.InteropServices.InAttribute)
get_X() cil managed
let verifyMethod = """.method public hidebysig specialname instance int32& modreq([netstandard]System.Runtime.InteropServices.InAttribute) get_X() cil managed
{
.param [0]
.custom instance void System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 )"""
Expand Down Expand Up @@ -452,9 +448,7 @@ type C<'T>() =
abstract X<'U> : unit -> inref<'U>
"""

let verifyMethod = """.method public hidebysig abstract virtual
instance !!U& modreq([runtime]System.Runtime.InteropServices.InAttribute)
X<U>() cil managed
let verifyMethod = """.method public hidebysig abstract virtual instance !!U& modreq([runtime]System.Runtime.InteropServices.InAttribute) X<U>() cil managed
{
.param [0]
.custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 )"""
Expand All @@ -481,9 +475,7 @@ type C =
.get instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute) Test/C::get_X()
}"""

let verifyMethod = """.method public hidebysig specialname abstract virtual
instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute)
get_X() cil managed
let verifyMethod = """.method public hidebysig specialname abstract virtual instance int32& modreq([runtime]System.Runtime.InteropServices.InAttribute) get_X() cil managed
{
.param [0]
.custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 )"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,59 @@ type ILArrayShape =
]
|> shouldSucceed

[<InlineData(true, "public")>] // RealSig
[<InlineData(false, "assembly")>] // Regular
[<Theory>]
let ``private DU in module`` (realSig, expected) =
FSharp """
module RealInternalSignature
module Module =
type private DU = ABC | YYZ
let publicFunction () : bool =
ABC = YYZ
Module.publicFunction () |> printfn "%b"
"""
|> asExe
|> withRealInternalSignature realSig
|> compileAndRun
|> withILContains [
$$"""
.method {{expected}} hidebysig instance bool Equals(class RealInternalSignature/Module/DU obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.maxstack 4
.locals init (int32 V_0,
int32 V_1)
IL_0000: ldarg.0
IL_0001: brfalse.s IL_001b
IL_0003: ldarg.1
IL_0004: brfalse.s IL_0019
IL_0006: ldarg.0
IL_0007: ldfld int32 RealInternalSignature/Module/DU::_tag
IL_000c: stloc.0
IL_000d: ldarg.1
IL_000e: ldfld int32 RealInternalSignature/Module/DU::_tag
IL_0013: stloc.1
IL_0014: ldloc.0
IL_0015: ldloc.1
IL_0016: ceq
IL_0018: ret
IL_0019: ldc.i4.0
IL_001a: ret
IL_001b: ldarg.1
IL_001c: ldnull
IL_001d: cgt.un
IL_001f: ldc.i4.0
IL_0020: ceq
IL_0022: ret
}
"""
]
|> shouldSucceed
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ Value.Zero = Value.Create 0 |> ignore"""
|> compileExeAndRun
|> shouldSucceed

[<InlineData(false, "private", "assembly")>] // Legacy, private WrapType, private visibility in IL
[<InlineData(false, "private", "assembly")>] // Legacy, private WrapType, assembly visibility in IL
[<InlineData(false, "internal", "assembly")>] // RealSig, internal WrapType, assembly visibility in IL
[<InlineData(false, "public", "public")>] // Legacy, public WrapType, public visibility in IL
[<InlineData(true, "private", "private")>] // RealSig, private WrapType, private visibility in IL
[<InlineData(true, "internal", "assembly")>] // RealSig, internal WrapType, assembly visibility in IL
[<InlineData(true, "private", "public")>] // RealSig, private WrapType, private visibility in IL
[<InlineData(true, "internal", "public")>] // RealSig, internal WrapType, assembly visibility in IL
[<InlineData(true, "public", "public")>] // RealSig, public WrapType, public visibility in IL
[<Theory>]
let ``Generated typed Equals`` (realsig, typeScope, targetVisibility) =
Expand All @@ -81,9 +81,7 @@ module Module1 =
|> shouldSucceed
|> verifyIL [
$"""
.method {targetVisibility} hidebysig instance bool
Equals(valuetype Program/Module1/Struct obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method {targetVisibility} hidebysig instance bool Equals(valuetype Program/Module1/Struct obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
Expand Down Expand Up @@ -172,8 +170,8 @@ module Module1 =
[<InlineData(false, "private", "assembly")>] // Legacy, private WrapType, private visibility in IL
[<InlineData(false, "internal", "assembly")>] // RealSig, internal WrapType, assembly visibility in IL
[<InlineData(false, "public", "public")>] // Legacy, public WrapType, public visibility in IL
[<InlineData(true, "private", "private")>] // RealSig, private WrapType, private visibility in IL
[<InlineData(true, "internal", "assembly")>] // RealSig, internal WrapType, assembly visibility in IL
[<InlineData(true, "private", "public")>] // RealSig, private WrapType, public visibility in IL
[<InlineData(true, "internal", "public")>] // RealSig, internal WrapType, public visibility in IL
[<InlineData(true, "public", "public")>] // RealSig, public WrapType, public visibility in IL
[<Theory>]
let ``scoped type arg`` (realsig, argScope, targetVisibility) =
Expand All @@ -195,9 +193,7 @@ module IPartialEqualityComparer =
|> shouldSucceed
|> verifyIL [
$"""
.method {targetVisibility} hidebysig instance bool
Equals(class Program/IPartialEqualityComparer/WrapType`1<!T> obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method {targetVisibility} hidebysig instance bool Equals(class Program/IPartialEqualityComparer/WrapType`1<!T> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,7 @@
IL_000c: ret
}

.method public hidebysig virtual final
instance int32 CompareTo(object obj,
class [runtime]System.Collections.IComparer comp) cil managed
.method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand Down Expand Up @@ -235,9 +233,7 @@
IL_000b: ret
}

.method assembly hidebysig instance bool
Equals(valuetype assembly/EqualsMicroPerfAndCodeGenerationTests/SomeStruct obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method public hidebysig instance bool Equals(valuetype assembly/EqualsMicroPerfAndCodeGenerationTests/SomeStruct obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand All @@ -259,9 +255,7 @@
IL_0020: ret
}

.method public hidebysig virtual final
instance bool Equals(object obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand All @@ -285,9 +279,7 @@
IL_0019: ret
}

.method public specialname rtspecialname
instance void .ctor(int32 v,
int32 u) cil managed
.method public specialname rtspecialname instance void .ctor(int32 v, int32 u) cil managed
{

.maxstack 8
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,7 @@
IL_000c: ret
}

.method public hidebysig virtual final
instance int32 CompareTo(object obj,
class [runtime]System.Collections.IComparer comp) cil managed
.method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand Down Expand Up @@ -235,9 +233,7 @@
IL_000b: ret
}

.method assembly hidebysig instance bool
Equals(valuetype assembly/EqualsMicroPerfAndCodeGenerationTests/SomeStruct obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method public hidebysig instance bool Equals(valuetype assembly/EqualsMicroPerfAndCodeGenerationTests/SomeStruct obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand All @@ -259,9 +255,7 @@
IL_0020: ret
}

.method public hidebysig virtual final
instance bool Equals(object obj,
class [runtime]System.Collections.IEqualityComparer comp) cil managed
.method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed
{
.custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )

Expand All @@ -285,9 +279,7 @@
IL_0019: ret
}

.method public specialname rtspecialname
instance void .ctor(int32 v,
int32 u) cil managed
.method public specialname rtspecialname instance void .ctor(int32 v, int32 u) cil managed
{

.maxstack 8
Expand Down
Loading

0 comments on commit bdbd346

Please sign in to comment.