Skip to content

Commit 534acc5

Browse files
committed
Fix declaration access for generated fields flattened from anonymous types.
1 parent 237b344 commit 534acc5

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

src/Generator.Tests/Passes/TestPasses.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,5 +232,23 @@ public void TestAbstractOperator()
232232
var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First();
233233
Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None);
234234
}
235+
236+
[Test]
237+
public void TestFlattenAnonymousTypesToFields()
238+
{
239+
passBuilder.AddPass(new FlattenAnonymousTypesToFields());
240+
passBuilder.RunPasses(pass => pass.VisitASTContext(AstContext));
241+
242+
var @class = AstContext.FindDecl<Class>("TestFlattenAnonymousTypesToFields").First();
243+
244+
/* TODO: Enable this test and fix the parsing bug
245+
var @public = @class.Fields.Where(f => f.Name == "Public").FirstOrDefault();
246+
Assert.IsNotNull(@public);
247+
Assert.AreEqual(AccessSpecifier.Public, @public.Access); */
248+
249+
var @protected = @class.Fields.Where(f => f.Name == "Protected").FirstOrDefault();
250+
Assert.IsNotNull(@protected);
251+
Assert.AreEqual(AccessSpecifier.Protected, @protected.Access);
252+
}
235253
}
236254
}

src/Generator/Passes/FlattenAnonymousTypesToFields.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ private static void ReplaceField(Class @class, int i, Class fieldType)
7575
{
7676
Field nestedField = fieldType.Fields[j];
7777
nestedField.Namespace = @class;
78+
nestedField.Access = fieldType.Access;
7879
@class.Fields.Insert(i + j, nestedField);
7980
}
8081
}

tests/Native/Passes.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,19 @@ enum ConnectionRole
8484
};
8585

8686
bool ConnectionRoleToString(const ConnectionRole& role, const char* role_str);
87+
88+
class TestFlattenAnonymousTypesToFields
89+
{
90+
/* TODO: Enable this code (and respective test in TestPasses).
91+
public:
92+
union
93+
{
94+
int Public;
95+
};
96+
*/
97+
protected:
98+
union
99+
{
100+
int Protected;
101+
};
102+
};

0 commit comments

Comments
 (0)