From b76446aa88179575e2ae3f60f34bb1a564091611 Mon Sep 17 00:00:00 2001 From: Julien Couvreur Date: Thu, 8 May 2025 17:00:39 -0700 Subject: [PATCH] Extensions: only count extensions for determining identifier --- .../Source/SourceNamedTypeSymbol_Extension.cs | 17 +++++++++++++++-- .../Test/Emit3/Semantics/ExtensionTests.cs | 19 ++++++++++--------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Symbols/Source/SourceNamedTypeSymbol_Extension.cs b/src/Compilers/CSharp/Portable/Symbols/Source/SourceNamedTypeSymbol_Extension.cs index 241e3a99b7502..c99a475b07b2d 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Source/SourceNamedTypeSymbol_Extension.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Source/SourceNamedTypeSymbol_Extension.cs @@ -45,8 +45,21 @@ internal override string ExtensionName declaration = ((SourceNamespaceSymbol)this.ContainingSymbol).MergedDeclaration; } - var index = declaration.Children.IndexOf(this.declaration); - return GeneratedNames.MakeExtensionName(index); + int index = 0; + foreach (Declaration child in declaration.Children) + { + if (child == this.declaration) + { + return GeneratedNames.MakeExtensionName(index); + } + + if (child.Kind == DeclarationKind.Extension) + { + index++; + } + } + + throw ExceptionUtilities.Unreachable(); } } diff --git a/src/Compilers/CSharp/Test/Emit3/Semantics/ExtensionTests.cs b/src/Compilers/CSharp/Test/Emit3/Semantics/ExtensionTests.cs index ee1c3924b647f..4df892712c474 100644 --- a/src/Compilers/CSharp/Test/Emit3/Semantics/ExtensionTests.cs +++ b/src/Compilers/CSharp/Test/Emit3/Semantics/ExtensionTests.cs @@ -919,7 +919,7 @@ public static partial class Extensions } [Fact] - public void ExtensionIndex_TwoExtensions_SameSignatures_01() + public void ExtensionIndex_TwoExtensions_01() { var src = """ public static class Extensions @@ -1560,7 +1560,7 @@ [0] int32 } [Fact] - public void ExtensionIndex_TwoExtensions_SameSignatures_02() + public void ExtensionIndex_TwoExtensions_02() { var src = """ public static class Extensions @@ -1585,12 +1585,12 @@ class C { } var extension2 = tree.GetRoot().DescendantNodes().OfType().Last(); var symbol2 = model.GetDeclaredSymbol(extension2); var sourceExtension2 = symbol2.GetSymbol(); - Assert.Equal("<>E__2`1", symbol2.MetadataName); - Assert.Equal("Extensions.<>E__2", symbol2.ToTestDisplayString()); + Assert.Equal("<>E__1`1", symbol2.MetadataName); + Assert.Equal("Extensions.<>E__1", symbol2.ToTestDisplayString()); } [Fact] - public void ExtensionIndex_TwoExtensions_SameSignatures_03() + public void ExtensionIndex_TwoExtensions_03() { var src = """ extension(T) { } @@ -1618,12 +1618,12 @@ class C { } var extension2 = tree.GetRoot().DescendantNodes().OfType().Last(); var symbol2 = model.GetDeclaredSymbol(extension2); var sourceExtension2 = symbol2.GetSymbol(); - Assert.Equal("<>E__2`1", symbol2.MetadataName); - Assert.Equal("<>E__2", symbol2.ToTestDisplayString()); + Assert.Equal("<>E__1`1", symbol2.MetadataName); + Assert.Equal("<>E__1", symbol2.ToTestDisplayString()); } [Fact] - public void ExtensionIndex_TwoExtensions_DifferentSignatures_01() + public void ExtensionIndex_TwoExtensions_05() { var src = """ public static class Extensions @@ -1652,7 +1652,7 @@ public static class Extensions } [Fact] - public void ExtensionIndex_TwoExtensions_DifferentSignatures_02() + public void ExtensionIndex_TwoExtensions_06() { var src = """ public static class Extensions @@ -1695,6 +1695,7 @@ public static class Extensions extension(T8 o8) { } extension(T9 o9) { } extension(T10 o10) { } + class C { } extension(T11 o11) { } } """;