Browse Source

Check if the anon field in a template crashes at the build server

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
template-anon-field
Dimitar Dobrev 5 years ago
parent
commit
aadbd31969
  1. 10
      src/Generator/Passes/FlattenAnonymousTypesToFields.cs
  2. 5
      tests/CSharp/CSharpTemplates.h

10
src/Generator/Passes/FlattenAnonymousTypesToFields.cs

@ -16,15 +16,14 @@ namespace CppSharp.Passes @@ -16,15 +16,14 @@ namespace CppSharp.Passes
public override bool VisitClassDecl(Class @class)
{
if (!base.VisitClassDecl(@class) || @class.Ignore || @class.IsDependent)
if (!base.VisitClassDecl(@class) || @class.Ignore)
return false;
for (int i = @class.Fields.Count - 1; i >= 0; i--)
{
Field field = @class.Fields[i];
Class fieldType;
if (!string.IsNullOrEmpty(field.OriginalName) ||
!field.Type.Desugar().TryGetClass(out fieldType) ||
!field.Type.Desugar().TryGetClass(out Class fieldType) ||
!string.IsNullOrEmpty(fieldType.OriginalName))
continue;
@ -39,12 +38,11 @@ namespace CppSharp.Passes @@ -39,12 +38,11 @@ namespace CppSharp.Passes
for (int i = @class.Layout.Fields.Count - 1; i >= 0; i--)
{
LayoutField field = @class.Layout.Fields[i];
Class fieldType;
if (!string.IsNullOrEmpty(field.Name) ||
!field.QualifiedType.Type.Desugar().TryGetClass(out fieldType) ||
!field.QualifiedType.Type.Desugar().TryGetClass(out Class fieldType) ||
!string.IsNullOrEmpty(fieldType.OriginalName))
continue;
ReplaceLayoutField(@class, i, fieldType);
fieldType.Fields.Clear();
fieldType.ExplicitlyIgnore();

5
tests/CSharp/CSharpTemplates.h

@ -56,7 +56,12 @@ public: @@ -56,7 +56,12 @@ public:
template <typename AdditionalDependentType>
void usesAdditionalDependentType(AdditionalDependentType additionalDependentType);
static const int independentConst;
private:
struct
{
int fieldInAnonType;
};
float independent;
};

Loading…
Cancel
Save