From fc2a938713a89c51f05c4bf696396f302cd5681e Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Thu, 10 Dec 2020 02:50:50 +0000 Subject: [PATCH] Fix forward include collector to consider value class semantics in function returns. --- src/Generator/AST/ASTRecord.cs | 12 ++++++++++++ src/Generator/Generators/CLI/CLITypeReferences.cs | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Generator/AST/ASTRecord.cs b/src/Generator/AST/ASTRecord.cs index cd880656..733a08f8 100644 --- a/src/Generator/AST/ASTRecord.cs +++ b/src/Generator/AST/ASTRecord.cs @@ -163,6 +163,18 @@ namespace CppSharp.Generators.AST return false; } + public static bool IsClassReturn(this ASTRecord record) + { + var ancestors = new Stack(); + if(!record.GetAncestors(ref ancestors)) + return false; + + var function = (Function)ancestors.Pop(); + var tagType = function.ReturnType.Type.Desugar() as TagType; + + return tagType?.Declaration is Class; + } + public static bool IsDelegate(this ASTRecord record) { var typedef = record.Object as TypedefDecl; diff --git a/src/Generator/Generators/CLI/CLITypeReferences.cs b/src/Generator/Generators/CLI/CLITypeReferences.cs index db222a2a..be472575 100644 --- a/src/Generator/Generators/CLI/CLITypeReferences.cs +++ b/src/Generator/Generators/CLI/CLITypeReferences.cs @@ -164,7 +164,7 @@ namespace CppSharp.Generators.CLI return false; return record.IsBaseClass() || record.IsFieldValueType() || record.IsDelegate() - || record.IsEnumNestedInClass(); + || record.IsEnumNestedInClass() || record.IsClassReturn(); } public override bool VisitDeclaration(Declaration decl)