From aadbd31969912b15775552da9981dddbb97a1df8 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sun, 24 Oct 2021 13:10:58 +0300 Subject: [PATCH] Check if the anon field in a template crashes at the build server Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/FlattenAnonymousTypesToFields.cs | 10 ++++------ tests/CSharp/CSharpTemplates.h | 5 +++++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Generator/Passes/FlattenAnonymousTypesToFields.cs b/src/Generator/Passes/FlattenAnonymousTypesToFields.cs index b769127a..297a0853 100644 --- a/src/Generator/Passes/FlattenAnonymousTypesToFields.cs +++ b/src/Generator/Passes/FlattenAnonymousTypesToFields.cs @@ -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 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(); diff --git a/tests/CSharp/CSharpTemplates.h b/tests/CSharp/CSharpTemplates.h index 6dc19710..40c905f3 100644 --- a/tests/CSharp/CSharpTemplates.h +++ b/tests/CSharp/CSharpTemplates.h @@ -56,7 +56,12 @@ public: template void usesAdditionalDependentType(AdditionalDependentType additionalDependentType); static const int independentConst; + private: + struct + { + int fieldInAnonType; + }; float independent; };