Skip to content

Commit fac1d52

Browse files
committed
Add explicit constructor since we are using struct field initializers
1 parent 0efa063 commit fac1d52

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2279,9 +2279,13 @@ public override SyntaxNode VisitStructDeclaration(StructDeclarationSyntax node)
22792279
return node;
22802280
}
22812281

2282+
// Structs need to have a constructor if we use field initializers
2283+
var hasConstructor = false;
2284+
var initializerAdded = false;
22822285
var members = new List<MemberDeclarationSyntax>();
22832286
foreach (var memberNode in node.Members)
22842287
{
2288+
hasConstructor |= memberNode is ConstructorDeclarationSyntax;
22852289
if (memberNode is not FieldDeclarationSyntax memberFieldNode)
22862290
{
22872291
members.Add(memberNode);
@@ -2312,6 +2316,7 @@ public override SyntaxNode VisitStructDeclaration(StructDeclarationSyntax node)
23122316
)
23132317
);
23142318

2319+
initializerAdded = true;
23152320
members.Add(
23162321
memberFieldNode.WithDeclaration(
23172322
memberFieldNode.Declaration.WithVariables(
@@ -2325,6 +2330,15 @@ .. memberFieldNode.Declaration.Variables.Select(variable =>
23252330
);
23262331
}
23272332

2333+
if (initializerAdded && !hasConstructor)
2334+
{
2335+
members.Add(
2336+
ConstructorDeclaration(node.Identifier)
2337+
.WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword)))
2338+
.WithBody(Block())
2339+
);
2340+
}
2341+
23282342
node = node.WithMembers([.. members]);
23292343

23302344
return node;

0 commit comments

Comments
 (0)