Browse Source

Fix declaration access for generated fields flattened from anonymous types.

pull/1328/head
João Matos 5 years ago committed by João Matos
parent
commit
534acc564d
  1. 18
      src/Generator.Tests/Passes/TestPasses.cs
  2. 1
      src/Generator/Passes/FlattenAnonymousTypesToFields.cs
  3. 16
      tests/Native/Passes.h

18
src/Generator.Tests/Passes/TestPasses.cs

@ -232,5 +232,23 @@ namespace CppSharp.Generator.Tests.Passes @@ -232,5 +232,23 @@ namespace CppSharp.Generator.Tests.Passes
var @class = AstContext.FindDecl<Class>("ClassWithAbstractOperator").First();
Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None);
}
[Test]
public void TestFlattenAnonymousTypesToFields()
{
passBuilder.AddPass(new FlattenAnonymousTypesToFields());
passBuilder.RunPasses(pass => pass.VisitASTContext(AstContext));
var @class = AstContext.FindDecl<Class>("TestFlattenAnonymousTypesToFields").First();
/* TODO: Enable this test and fix the parsing bug
var @public = @class.Fields.Where(f => f.Name == "Public").FirstOrDefault();
Assert.IsNotNull(@public);
Assert.AreEqual(AccessSpecifier.Public, @public.Access); */
var @protected = @class.Fields.Where(f => f.Name == "Protected").FirstOrDefault();
Assert.IsNotNull(@protected);
Assert.AreEqual(AccessSpecifier.Protected, @protected.Access);
}
}
}

1
src/Generator/Passes/FlattenAnonymousTypesToFields.cs

@ -75,6 +75,7 @@ namespace CppSharp.Passes @@ -75,6 +75,7 @@ namespace CppSharp.Passes
{
Field nestedField = fieldType.Fields[j];
nestedField.Namespace = @class;
nestedField.Access = fieldType.Access;
@class.Fields.Insert(i + j, nestedField);
}
}

16
tests/Native/Passes.h

@ -84,3 +84,19 @@ enum ConnectionRole @@ -84,3 +84,19 @@ enum ConnectionRole
};
bool ConnectionRoleToString(const ConnectionRole& role, const char* role_str);
class TestFlattenAnonymousTypesToFields
{
/* TODO: Enable this code (and respective test in TestPasses).
public:
union
{
int Public;
};
*/
protected:
union
{
int Protected;
};
};

Loading…
Cancel
Save