@@ -43,7 +43,23 @@ public override bool VisitClassDecl(Class @class)
43
43
continue ;
44
44
45
45
ReplaceField ( @class , i , fieldType ) ;
46
- ReplaceLayoutField ( @class , field , fieldType ) ;
46
+ fieldType . Fields . Clear ( ) ;
47
+ fieldType . ExplicitlyIgnore ( ) ;
48
+ }
49
+
50
+ if ( @class . Layout == null )
51
+ return true ;
52
+
53
+ for ( int i = @class . Layout . Fields . Count - 1 ; i >= 0 ; i -- )
54
+ {
55
+ LayoutField field = @class . Layout . Fields [ i ] ;
56
+ Class fieldType ;
57
+ if ( ! string . IsNullOrEmpty ( field . Name ) ||
58
+ ! field . QualifiedType . Type . Desugar ( ) . TryGetClass ( out fieldType ) ||
59
+ ! string . IsNullOrEmpty ( fieldType . OriginalName ) )
60
+ continue ;
61
+
62
+ ReplaceLayoutField ( @class , i , fieldType ) ;
47
63
fieldType . Fields . Clear ( ) ;
48
64
fieldType . ExplicitlyIgnore ( ) ;
49
65
}
@@ -63,18 +79,23 @@ private static void ReplaceField(Class @class, int i, Class fieldType)
63
79
}
64
80
}
65
81
66
- private static void ReplaceLayoutField ( Class @class , Field field , Class fieldType )
82
+ private static void ReplaceLayoutField ( Class @class , int i , Class fieldType )
67
83
{
68
- LayoutField layoutField = @class . Layout . Fields . Find (
69
- f => f . FieldPtr == field . OriginalPtr ) ;
70
- int layoutIndex = @class . Layout . Fields . IndexOf ( layoutField ) ;
71
- @class . Layout . Fields . RemoveAt ( layoutIndex ) ;
84
+ uint offset = @class . Layout . Fields [ i ] . Offset ;
85
+ @class . Layout . Fields . RemoveAt ( i ) ;
72
86
73
87
for ( int j = 0 ; j < fieldType . Layout . Fields . Count ; j ++ )
74
88
{
75
- LayoutField nestedlayoutField = fieldType . Layout . Fields [ j ] ;
76
- nestedlayoutField . Offset += layoutField . Offset ;
77
- @class . Layout . Fields . Insert ( layoutIndex + j , nestedlayoutField ) ;
89
+ LayoutField nestedLayoutField = fieldType . Layout . Fields [ j ] ;
90
+ var layoutField = new LayoutField
91
+ {
92
+ Expression = nestedLayoutField . Expression ,
93
+ FieldPtr = nestedLayoutField . FieldPtr ,
94
+ Name = nestedLayoutField . Name ,
95
+ Offset = nestedLayoutField . Offset + offset ,
96
+ QualifiedType = nestedLayoutField . QualifiedType
97
+ } ;
98
+ @class . Layout . Fields . Insert ( i + j , layoutField ) ;
78
99
}
79
100
}
80
101
}
0 commit comments