Browse Source

Keep copy/move constructors and assignment in AST

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

5
src/CppParser/Parser.cpp

@ -1776,8 +1776,13 @@ static CXXOperatorKind GetOperatorKindFromDecl(clang::DeclarationName Name)
Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD) Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD)
{ {
const clang::CXXConstructorDecl* Ctor;
if (opts->skipPrivateDeclarations && if (opts->skipPrivateDeclarations &&
MD->getAccess() == clang::AccessSpecifier::AS_private && MD->getAccess() == clang::AccessSpecifier::AS_private &&
!MD->isCopyAssignmentOperator() &&
!MD->isMoveAssignmentOperator() &&
(!(Ctor = llvm::dyn_cast<clang::CXXConstructorDecl>(MD)) ||
!Ctor->isCopyOrMoveConstructor()) &&
!MD->isVirtual()) !MD->isVirtual())
return nullptr; return nullptr;

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

@ -602,5 +602,13 @@ namespace CppSharp.Generator.Tests.AST
var @classC = AstContext.FindClass("ClassC").First(); var @classC = AstContext.FindClass("ClassC").First();
Assert.That(@classC.Redeclarations.Count, Is.EqualTo(2)); Assert.That(@classC.Redeclarations.Count, Is.EqualTo(2));
} }
[Test]
public void TestPrivateCCtorCopyAssignment()
{
Class @class = AstContext.FindCompleteClass("HasPrivateCCtorCopyAssignment");
Assert.That(@class.Constructors.Any(c => c.IsCopyConstructor), Is.True);
Assert.That(@class.Methods.Any(o => o.OperatorKind == CXXOperatorKind.Equal), Is.True);
}
} }
} }

7
tests/Native/AST.h

@ -237,3 +237,10 @@ class ClassB;
class ClassC {}; class ClassC {};
class ClassC; class ClassC;
class ClassC; class ClassC;
class HasPrivateCCtorCopyAssignment
{
private:
HasPrivateCCtorCopyAssignment(const HasPrivateCCtorCopyAssignment&) = delete;
HasPrivateCCtorCopyAssignment& operator=(const HasPrivateCCtorCopyAssignment&) = delete;
};

Loading…
Cancel
Save