@@ -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