Browse Source

Always keep default constructors in the AST

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1307/head
Dimitar Dobrev 5 years ago
parent
commit
c80986e04e
  1. 4
      src/CppParser/Parser.cpp
  2. 1
      src/Generator.Tests/AST/TestAST.cs
  3. 1
      tests/Native/AST.h

4
src/CppParser/Parser.cpp

@ -1779,11 +1779,11 @@ Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD) @@ -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<clang::CXXConstructorDecl>(MD)) ||
!Ctor->isCopyOrMoveConstructor()) &&
!MD->isVirtual())
(!Ctor->isDefaultConstructor() && !Ctor->isCopyOrMoveConstructor())))
return nullptr;
using namespace clang;

1
src/Generator.Tests/AST/TestAST.cs

@ -607,6 +607,7 @@ namespace CppSharp.Generator.Tests.AST @@ -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);
}

1
tests/Native/AST.h

@ -241,6 +241,7 @@ class ClassC; @@ -241,6 +241,7 @@ class ClassC;
class HasPrivateCCtorCopyAssignment
{
private:
HasPrivateCCtorCopyAssignment() = delete;
HasPrivateCCtorCopyAssignment(const HasPrivateCCtorCopyAssignment&) = delete;
HasPrivateCCtorCopyAssignment& operator=(const HasPrivateCCtorCopyAssignment&) = delete;
};

Loading…
Cancel
Save