From c80986e04ed336c33701fa51fb52c1e8933e8c5b Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 30 Mar 2020 03:21:23 +0300 Subject: [PATCH] Always keep default constructors in the AST Signed-off-by: Dimitar Dobrev --- src/CppParser/Parser.cpp | 4 ++-- src/Generator.Tests/AST/TestAST.cs | 1 + tests/Native/AST.h | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index 908e72bc..ff1b5c3f 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -1779,11 +1779,11 @@ Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD) const clang::CXXConstructorDecl* Ctor; if (opts->skipPrivateDeclarations && MD->getAccess() == clang::AccessSpecifier::AS_private && + !MD->isVirtual() && !MD->isCopyAssignmentOperator() && !MD->isMoveAssignmentOperator() && (!(Ctor = llvm::dyn_cast(MD)) || - !Ctor->isCopyOrMoveConstructor()) && - !MD->isVirtual()) + (!Ctor->isDefaultConstructor() && !Ctor->isCopyOrMoveConstructor()))) return nullptr; using namespace clang; diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index 3ef58111..d9913fea 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -607,6 +607,7 @@ namespace CppSharp.Generator.Tests.AST public void TestPrivateCCtorCopyAssignment() { Class @class = AstContext.FindCompleteClass("HasPrivateCCtorCopyAssignment"); + Assert.That(@class.Constructors.Any(c => c.Parameters.Count == 0), Is.True); Assert.That(@class.Constructors.Any(c => c.IsCopyConstructor), Is.True); Assert.That(@class.Methods.Any(o => o.OperatorKind == CXXOperatorKind.Equal), Is.True); } diff --git a/tests/Native/AST.h b/tests/Native/AST.h index e9cdd8fd..c0ecc541 100644 --- a/tests/Native/AST.h +++ b/tests/Native/AST.h @@ -241,6 +241,7 @@ class ClassC; class HasPrivateCCtorCopyAssignment { private: + HasPrivateCCtorCopyAssignment() = delete; HasPrivateCCtorCopyAssignment(const HasPrivateCCtorCopyAssignment&) = delete; HasPrivateCCtorCopyAssignment& operator=(const HasPrivateCCtorCopyAssignment&) = delete; };