Skip to content

Commit 7a5a2a0

Browse files
#3452: Transform field initializers in structs only if no record and no primary ctor.
1 parent cb48768 commit 7a5a2a0

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void Run(AstNode node, TransformContext context)
5050
{
5151
// If we're viewing some set of members (fields are direct children of SyntaxTree),
5252
// we also need to handle those:
53-
HandleInstanceFieldInitializers(node.Children, context.CurrentTypeDefinition);
53+
HandleInstanceFieldInitializers(node.Children, null, context.CurrentTypeDefinition);
5454
HandleStaticFieldInitializers(node.Children, context.CurrentTypeDefinition);
5555

5656
node.AcceptVisitor(this);
@@ -173,7 +173,7 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
173173
var currentTypeDefinition = (ITypeDefinition)typeDeclaration.GetSymbol();
174174

175175
// Handle initializers on instance fields
176-
HandleInstanceFieldInitializers(typeDeclaration.Members, currentTypeDefinition);
176+
HandleInstanceFieldInitializers(typeDeclaration.Members, typeDeclaration, currentTypeDefinition);
177177

178178
// Now convert base constructor calls to initializers:
179179
base.VisitTypeDeclaration(typeDeclaration);
@@ -200,10 +200,11 @@ static bool ChainsWithThis(ConstructorDeclaration ctor)
200200
return true;
201201
}
202202

203-
void HandleInstanceFieldInitializers(IEnumerable<AstNode> members, ITypeDefinition currentTypeDefinition)
203+
void HandleInstanceFieldInitializers(IEnumerable<AstNode> members, EntityDeclaration entityDeclaration, ITypeDefinition currentTypeDefinition)
204204
{
205-
if (currentTypeDefinition is { Kind: TypeKind.Struct, IsRecord: false }
206-
&& !context.Settings.StructDefaultConstructorsAndFieldInitializers)
205+
if (!context.Settings.StructDefaultConstructorsAndFieldInitializers
206+
&& currentTypeDefinition is { Kind: TypeKind.Struct, IsRecord: false }
207+
&& entityDeclaration is TypeDeclaration { HasPrimaryConstructor: false })
207208
{
208209
return;
209210
}

0 commit comments

Comments
 (0)