Skip to content

Commit 0efa063

Browse files
committed
Use VisitStructDeclaration instead of VisitFieldDeclaration since we need to modify the struct as well
1 parent 4b9346d commit 0efa063

1 file changed

Lines changed: 45 additions & 36 deletions

File tree

sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs

Lines changed: 45 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2269,54 +2269,63 @@ public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node)
22692269
/// </summary>
22702270
private class RewriterPhase4(JobData job) : CSharpSyntaxRewriter
22712271
{
2272-
public override SyntaxNode VisitFieldDeclaration(FieldDeclarationSyntax node)
2272+
public override SyntaxNode VisitStructDeclaration(StructDeclarationSyntax node)
22732273
{
2274-
if (node.Parent is not StructDeclarationSyntax structNode)
2275-
{
2276-
return node;
2277-
}
2278-
2279-
var structNativeName = structNode.AttributeLists.GetNativeNameOrDefault(
2280-
structNode.Identifier
2281-
);
2274+
var structNativeName = node.AttributeLists.GetNativeNameOrDefault(node.Identifier);
22822275
if (
22832276
!job.StructureTypeMembers.TryGetValue(structNativeName, out var structureTypeMember)
22842277
)
22852278
{
22862279
return node;
22872280
}
22882281

2289-
var memberNativeName = node.AttributeLists.GetNativeNameOrDefault(
2290-
node.Declaration.Variables.First().Identifier
2291-
);
2292-
if (memberNativeName != structureTypeMember.Name)
2282+
var members = new List<MemberDeclarationSyntax>();
2283+
foreach (var memberNode in node.Members)
22932284
{
2294-
return node;
2295-
}
2285+
if (memberNode is not FieldDeclarationSyntax memberFieldNode)
2286+
{
2287+
members.Add(memberNode);
2288+
continue;
2289+
}
22962290

2297-
// Don't replace the default value if one is already provided
2298-
if (node.Declaration.Variables.First().Initializer != null)
2299-
{
2300-
return node;
2301-
}
2291+
var memberNativeName = memberFieldNode.AttributeLists.GetNativeNameOrDefault(
2292+
memberFieldNode.Declaration.Variables.First().Identifier
2293+
);
23022294

2303-
var initializer = EqualsValueClause(
2304-
MemberAccessExpression(
2305-
SyntaxKind.SimpleMemberAccessExpression,
2306-
IdentifierName(structureTypeMember.Type),
2307-
IdentifierName(structureTypeMember.Value)
2308-
)
2309-
);
2295+
if (memberNativeName != structureTypeMember.Name)
2296+
{
2297+
members.Add(memberNode);
2298+
continue;
2299+
}
23102300

2311-
node = node.WithDeclaration(
2312-
node.Declaration.WithVariables(
2313-
[
2314-
.. node.Declaration.Variables.Select(variable =>
2315-
variable.WithInitializer(initializer)
2316-
),
2317-
]
2318-
)
2319-
);
2301+
// Don't replace the default value if one is already provided
2302+
if (memberFieldNode.Declaration.Variables.First().Initializer != null)
2303+
{
2304+
return node;
2305+
}
2306+
2307+
var initializer = EqualsValueClause(
2308+
MemberAccessExpression(
2309+
SyntaxKind.SimpleMemberAccessExpression,
2310+
IdentifierName(structureTypeMember.Type),
2311+
IdentifierName(structureTypeMember.Value)
2312+
)
2313+
);
2314+
2315+
members.Add(
2316+
memberFieldNode.WithDeclaration(
2317+
memberFieldNode.Declaration.WithVariables(
2318+
[
2319+
.. memberFieldNode.Declaration.Variables.Select(variable =>
2320+
variable.WithInitializer(initializer)
2321+
),
2322+
]
2323+
)
2324+
)
2325+
);
2326+
}
2327+
2328+
node = node.WithMembers([.. members]);
23202329

23212330
return node;
23222331
}

0 commit comments

Comments
 (0)