Browse Source

Always keep default constructors in the AST

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1307/head
Dimitar Dobrev 6 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)
const clang::CXXConstructorDecl* Ctor; const clang::CXXConstructorDecl* Ctor;
if (opts->skipPrivateDeclarations && if (opts->skipPrivateDeclarations &&
MD->getAccess() == clang::AccessSpecifier::AS_private && MD->getAccess() == clang::AccessSpecifier::AS_private &&
!MD->isVirtual() &&
!MD->isCopyAssignmentOperator() && !MD->isCopyAssignmentOperator() &&
!MD->isMoveAssignmentOperator() && !MD->isMoveAssignmentOperator() &&
(!(Ctor = llvm::dyn_cast<clang::CXXConstructorDecl>(MD)) || (!(Ctor = llvm::dyn_cast<clang::CXXConstructorDecl>(MD)) ||
!Ctor->isCopyOrMoveConstructor()) && (!Ctor->isDefaultConstructor() && !Ctor->isCopyOrMoveConstructor())))
!MD->isVirtual())
return nullptr; return nullptr;
using namespace clang; using namespace clang;

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

@ -607,6 +607,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestPrivateCCtorCopyAssignment() public void TestPrivateCCtorCopyAssignment()
{ {
Class @class = AstContext.FindCompleteClass("HasPrivateCCtorCopyAssignment"); 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.Constructors.Any(c => c.IsCopyConstructor), Is.True);
Assert.That(@class.Methods.Any(o => o.OperatorKind == CXXOperatorKind.Equal), 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;
class HasPrivateCCtorCopyAssignment class HasPrivateCCtorCopyAssignment
{ {
private: private:
HasPrivateCCtorCopyAssignment() = delete;
HasPrivateCCtorCopyAssignment(const HasPrivateCCtorCopyAssignment&) = delete; HasPrivateCCtorCopyAssignment(const HasPrivateCCtorCopyAssignment&) = delete;
HasPrivateCCtorCopyAssignment& operator=(const HasPrivateCCtorCopyAssignment&) = delete; HasPrivateCCtorCopyAssignment& operator=(const HasPrivateCCtorCopyAssignment&) = delete;
}; };

Loading…
Cancel
Save