From e1d78f2b42cea8cd0e2a45661436308302bf352c Mon Sep 17 00:00:00 2001 From: Jack Tyrer Date: Thu, 18 Mar 2021 22:14:25 +0000 Subject: [PATCH 1/3] Rename record equality parameters to 'left' and 'right' --- .../SynthesizedRecordEqualityOperator.cs | 20 +++++++++---------- .../SynthesizedRecordEqualityOperatorBase.cs | 12 +++++------ .../SynthesizedRecordInequalityOperator.cs | 10 +++++----- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperator.cs b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperator.cs index 9d4d743eb20e1..004086463a319 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperator.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperator.cs @@ -13,10 +13,10 @@ namespace Microsoft.CodeAnalysis.CSharp.Symbols /// /// The record type includes synthesized '==' and '!=' operators equivalent to operators declared as follows: /// - /// public static bool operator==(R? r1, R? r2) - /// => (object) r1 == r2 || ((object)r1 != null && r1.Equals(r2)); - /// public static bool operator !=(R? r1, R? r2) - /// => !(r1 == r2); + /// public static bool operator==(R? left, R? right) + /// => (object) left == right || ((object)left != null && left.Equals(right)); + /// public static bool operator !=(R? left, R? right) + /// => !(left == right); /// ///The 'Equals' method called by the '==' operator is the 'Equals(R? other)' (). ///The '!=' operator delegates to the '==' operator. It is an error if the operators are declared explicitly. @@ -34,7 +34,7 @@ internal override void GenerateMethodBody(TypeCompilationState compilationState, try { - // => (object)r1 == r2 || ((object)r1 != null && r1.Equals(r2)); + // => (object)left == right || ((object)left != null && left.Equals(right)); MethodSymbol? equals = null; foreach (var member in ContainingType.GetMembers(WellKnownMemberNames.ObjectEquals)) { @@ -54,12 +54,12 @@ internal override void GenerateMethodBody(TypeCompilationState compilationState, return; } - var r1 = F.Parameter(Parameters[0]); - var r2 = F.Parameter(Parameters[1]); + var left = F.Parameter(Parameters[0]); + var right = F.Parameter(Parameters[1]); - BoundExpression objectEqual = F.ObjectEqual(r1, r2); - BoundExpression recordEquals = F.LogicalAnd(F.ObjectNotEqual(r1, F.Null(F.SpecialType(SpecialType.System_Object))), - F.Call(r1, equals, r2)); + BoundExpression objectEqual = F.ObjectEqual(left, right); + BoundExpression recordEquals = F.LogicalAnd(F.ObjectNotEqual(left, F.Null(F.SpecialType(SpecialType.System_Object))), + F.Call(left, equals, right)); F.CloseMethod(F.Block(F.Return(F.LogicalOr(objectEqual, recordEquals)))); } diff --git a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperatorBase.cs b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperatorBase.cs index 74942dfe9807f..205e01c058cea 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperatorBase.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordEqualityOperatorBase.cs @@ -14,10 +14,10 @@ namespace Microsoft.CodeAnalysis.CSharp.Symbols /// /// The record type includes synthesized '==' and '!=' operators equivalent to operators declared as follows: /// - /// public static bool operator==(R? r1, R? r2) - /// => (object) r1 == r2 || ((object)r1 != null && r1.Equals(r2)); - /// public static bool operator !=(R? r1, R? r2) - /// => !(r1 == r2); + /// public static bool operator==(R? left, R? right) + /// => (object) left == right || ((object)left != null && left.Equals(right)); + /// public static bool operator !=(R? left, R? right) + /// => !(left == right); /// ///The 'Equals' method called by the '==' operator is the 'Equals(R? other)' (). ///The '!=' operator delegates to the '==' operator. It is an error if the operators are declared explicitly. @@ -58,10 +58,10 @@ protected sealed override (TypeWithAnnotations ReturnType, ImmutableArray( new SourceSimpleParameterSymbol(owner: this, TypeWithAnnotations.Create(ContainingType, NullableAnnotation.Annotated), - ordinal: 0, RefKind.None, "r1", isDiscard: false, Locations), + ordinal: 0, RefKind.None, "left", isDiscard: false, Locations), new SourceSimpleParameterSymbol(owner: this, TypeWithAnnotations.Create(ContainingType, NullableAnnotation.Annotated), - ordinal: 1, RefKind.None, "r2", isDiscard: false, Locations))); + ordinal: 1, RefKind.None, "right", isDiscard: false, Locations))); } protected override int GetParameterCountFromSyntax() => 2; diff --git a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordInequalityOperator.cs b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordInequalityOperator.cs index d26e4bc6421a9..6292f422cfc07 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordInequalityOperator.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Synthesized/Records/SynthesizedRecordInequalityOperator.cs @@ -14,10 +14,10 @@ namespace Microsoft.CodeAnalysis.CSharp.Symbols /// /// The record type includes synthesized '==' and '!=' operators equivalent to operators declared as follows: /// - /// public static bool operator==(R? r1, R? r2) - /// => (object) r1 == r2 || ((object)r1 != null && r1.Equals(r2)); - /// public static bool operator !=(R? r1, R? r2) - /// => !(r1 == r2); + /// public static bool operator==(R? left, R? right) + /// => (object) left == right || ((object)left != null && left.Equals(right)); + /// public static bool operator !=(R? left, R? right) + /// => !(left == right); /// ///The 'Equals' method called by the '==' operator is the 'Equals(R? other)' (). ///The '!=' operator delegates to the '==' operator. It is an error if the operators are declared explicitly. @@ -35,7 +35,7 @@ internal override void GenerateMethodBody(TypeCompilationState compilationState, try { - // => !(r1 == r2); + // => !(left == right); F.CloseMethod(F.Block(F.Return(F.Not(F.Call(receiver: null, ContainingType.GetMembers(WellKnownMemberNames.EqualityOperatorName).OfType().Single(), F.Parameter(Parameters[0]), F.Parameter(Parameters[1])))))); } From 14c2798515a47da69c8835db303f35c49b119e91 Mon Sep 17 00:00:00 2001 From: Jack Tyrer Date: Thu, 18 Mar 2021 23:33:02 +0000 Subject: [PATCH 2/3] Update RecordTests.NominalRecordMembers To reflect changes to record equality operators --- .../CSharp/Test/Symbol/Symbols/Source/RecordTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/RecordTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/RecordTests.cs index 75219d4ea9bfc..8761da9f9410e 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/RecordTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/RecordTests.cs @@ -1139,8 +1139,8 @@ record C "void C.Y.init", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder! builder)", - "System.Boolean C.operator !=(C? r1, C? r2)", - "System.Boolean C.operator ==(C? r1, C? r2)", + "System.Boolean C.operator !=(C? left, C? right)", + "System.Boolean C.operator ==(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", From 3de2d058365be4ea21b25df5f7afec6fe996f0a0 Mon Sep 17 00:00:00 2001 From: Jack Tyrer Date: Fri, 19 Mar 2021 00:26:30 +0000 Subject: [PATCH 3/3] Fix further affected unit tests --- .../Semantic/Semantics/InitOnlyMemberTests.cs | 4 +- .../Test/Semantic/Semantics/RecordTests.cs | 48 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/InitOnlyMemberTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/InitOnlyMemberTests.cs index a6d4f80a20303..9c3bcbeaf1b2a 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/InitOnlyMemberTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/InitOnlyMemberTests.cs @@ -2542,8 +2542,8 @@ void M() { } "void C.M()", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean C.op_Inequality(C? r1, C? r2)", - "System.Boolean C.op_Equality(C? r1, C? r2)", + "System.Boolean C.op_Inequality(C? left, C? right)", + "System.Boolean C.op_Equality(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/RecordTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/RecordTests.cs index 79649f0c889c2..c62c25c109303 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/RecordTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/RecordTests.cs @@ -275,7 +275,7 @@ void M(RecordA a, RecordB b) var tree = comp.SyntaxTrees.First(); var model = comp.GetSemanticModel(tree, ignoreAccessibility: false); var node = tree.GetRoot().DescendantNodes().OfType().Single(); - Assert.Equal("System.Boolean RecordB.op_Equality(RecordB? r1, RecordB? r2)", + Assert.Equal("System.Boolean RecordB.op_Equality(RecordB? left, RecordB? right)", model.GetSymbolInfo(node).Symbol.ToTestDisplayString()); } @@ -287,7 +287,7 @@ public record RecordB(); "; var comp = CreateCompilation(src); var b = comp.GlobalNamespace.GetTypeMember("RecordB"); - AssertEx.SetEqual(new[] { "System.Boolean RecordB.op_Equality(RecordB? r1, RecordB? r2)" }, + AssertEx.SetEqual(new[] { "System.Boolean RecordB.op_Equality(RecordB? left, RecordB? right)" }, b.GetSimpleNonTypeMembers("op_Equality").ToTestDisplayStrings()); } @@ -1023,8 +1023,8 @@ public void set_X() { } "System.Int32 C.set_Y(System.Int32 value)", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean C.op_Inequality(C? r1, C? r2)", - "System.Boolean C.op_Equality(C? r1, C? r2)", + "System.Boolean C.op_Inequality(C? left, C? right)", + "System.Boolean C.op_Equality(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", @@ -1468,8 +1468,8 @@ .maxstack 1 "System.Type C.EqualityContract { get; }", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean C.op_Inequality(C? r1, C? r2)", - "System.Boolean C.op_Equality(C? r1, C? r2)", + "System.Boolean C.op_Inequality(C? left, C? right)", + "System.Boolean C.op_Equality(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", @@ -9706,8 +9706,8 @@ public void Inheritance_09() "System.Int32 C.Y.get", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean C.op_Inequality(C? r1, C? r2)", - "System.Boolean C.op_Equality(C? r1, C? r2)", + "System.Boolean C.op_Inequality(C? left, C? right)", + "System.Boolean C.op_Equality(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", @@ -10391,8 +10391,8 @@ record C(object P) "System.Object B.Q { get; init; }", "System.String B.ToString()", "System.Boolean B." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean B.op_Inequality(B? r1, B? r2)", - "System.Boolean B.op_Equality(B? r1, B? r2)", + "System.Boolean B.op_Inequality(B? left, B? right)", + "System.Boolean B.op_Equality(B? left, B? right)", "System.Int32 B.GetHashCode()", "System.Boolean B.Equals(System.Object? obj)", "System.Boolean B.Equals(A? other)", @@ -10416,8 +10416,8 @@ record C(object P) "System.Object C.set_Q()", "System.String C.ToString()", "System.Boolean C." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean C.op_Inequality(C? r1, C? r2)", - "System.Boolean C.op_Equality(C? r1, C? r2)", + "System.Boolean C.op_Inequality(C? left, C? right)", + "System.Boolean C.op_Equality(C? left, C? right)", "System.Int32 C.GetHashCode()", "System.Boolean C.Equals(System.Object? obj)", "System.Boolean C.Equals(C? other)", @@ -15380,8 +15380,8 @@ record B(int X, int Y) : A "System.Int32 B.Y { get; init; }", "System.String B.ToString()", "System.Boolean B." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean B.op_Inequality(B? r1, B? r2)", - "System.Boolean B.op_Equality(B? r1, B? r2)", + "System.Boolean B.op_Inequality(B? left, B? right)", + "System.Boolean B.op_Equality(B? left, B? right)", "System.Int32 B.GetHashCode()", "System.Boolean B.Equals(System.Object? obj)", "System.Boolean B.Equals(A? other)", @@ -15432,8 +15432,8 @@ record B(int X, int Y) : A "System.Int32 B.Y { get; init; }", "System.String B.ToString()", "System.Boolean B." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean B.op_Inequality(B? r1, B? r2)", - "System.Boolean B.op_Equality(B? r1, B? r2)", + "System.Boolean B.op_Inequality(B? left, B? right)", + "System.Boolean B.op_Equality(B? left, B? right)", "System.Int32 B.GetHashCode()", "System.Boolean B.Equals(System.Object? obj)", "System.Boolean B.Equals(A? other)", @@ -19937,7 +19937,7 @@ True True False False var comp = (CSharpCompilation)verifier.Compilation; MethodSymbol op = comp.GetMembers("A." + WellKnownMemberNames.EqualityOperatorName).OfType().Single(); - Assert.Equal("System.Boolean A.op_Equality(A? r1, A? r2)", op.ToTestDisplayString()); + Assert.Equal("System.Boolean A.op_Equality(A? left, A? right)", op.ToTestDisplayString()); Assert.Equal(Accessibility.Public, op.DeclaredAccessibility); Assert.True(op.IsStatic); Assert.False(op.IsAbstract); @@ -19947,7 +19947,7 @@ True True False False Assert.True(op.IsImplicitlyDeclared); op = comp.GetMembers("A." + WellKnownMemberNames.InequalityOperatorName).OfType().Single(); - Assert.Equal("System.Boolean A.op_Inequality(A? r1, A? r2)", op.ToTestDisplayString()); + Assert.Equal("System.Boolean A.op_Inequality(A? left, A? right)", op.ToTestDisplayString()); Assert.Equal(Accessibility.Public, op.DeclaredAccessibility); Assert.True(op.IsStatic); Assert.False(op.IsAbstract); @@ -20056,7 +20056,7 @@ False False True True var comp = (CSharpCompilation)verifier.Compilation; MethodSymbol op = comp.GetMembers("A." + WellKnownMemberNames.EqualityOperatorName).OfType().Single(); - Assert.Equal("System.Boolean A.op_Equality(A? r1, A? r2)", op.ToTestDisplayString()); + Assert.Equal("System.Boolean A.op_Equality(A? left, A? right)", op.ToTestDisplayString()); Assert.Equal(Accessibility.Public, op.DeclaredAccessibility); Assert.True(op.IsStatic); Assert.False(op.IsAbstract); @@ -20066,7 +20066,7 @@ False False True True Assert.True(op.IsImplicitlyDeclared); op = comp.GetMembers("A." + WellKnownMemberNames.InequalityOperatorName).OfType().Single(); - Assert.Equal("System.Boolean A.op_Inequality(A? r1, A? r2)", op.ToTestDisplayString()); + Assert.Equal("System.Boolean A.op_Inequality(A? left, A? right)", op.ToTestDisplayString()); Assert.Equal(Accessibility.Public, op.DeclaredAccessibility); Assert.True(op.IsStatic); Assert.False(op.IsAbstract); @@ -23145,8 +23145,8 @@ record C : B; "System.Type B.EqualityContract.get", "System.String B.ToString()", "System.Boolean B." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean B.op_Inequality(B? r1, B? r2)", - "System.Boolean B.op_Equality(B? r1, B? r2)", + "System.Boolean B.op_Inequality(B? left, B? right)", + "System.Boolean B.op_Equality(B? left, B? right)", "System.Int32 B.GetHashCode()", "System.Boolean B.Equals(System.Object? obj)", "System.Boolean B.Equals(A? other)", @@ -23293,8 +23293,8 @@ static void Main() "System.Int32 B1.P { get; init; }", "System.String B1.ToString()", "System.Boolean B1." + WellKnownMemberNames.PrintMembersMethodName + "(System.Text.StringBuilder builder)", - "System.Boolean B1.op_Inequality(B1? r1, B1? r2)", - "System.Boolean B1.op_Equality(B1? r1, B1? r2)", + "System.Boolean B1.op_Inequality(B1? left, B1? right)", + "System.Boolean B1.op_Equality(B1? left, B1? right)", "System.Int32 B1.GetHashCode()", "System.Boolean B1.Equals(System.Object? obj)", "System.Boolean B1.Equals(A? other)",