Skip to content

Commit 30c3a30

Browse files
committed
Rework predicates
1 parent 31de851 commit 30c3a30

3 files changed

Lines changed: 16 additions & 16 deletions

File tree

‎cpp2rust/converter/converter_lib.cpp‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -263,24 +263,21 @@ bool IsUserDefinedCopyConstructor(const clang::CXXConstructorDecl *ctor) {
263263
IsUserDefinedDecl(ctor);
264264
}
265265

266-
bool IsUserDefinedCopyOrMoveConstructor(const clang::CXXConstructorDecl *ctor) {
267-
return ctor->isCopyOrMoveConstructor() && ctor->isUserProvided() &&
266+
bool IsUserDefinedMoveConstructor(const clang::CXXConstructorDecl *ctor) {
267+
return ctor->isMoveConstructor() && ctor->isUserProvided() &&
268268
IsUserDefinedDecl(ctor);
269269
}
270270

271+
bool IsUserDefinedCopyOrMoveConstructor(const clang::CXXConstructorDecl *ctor) {
272+
return IsUserDefinedCopyConstructor(ctor) ||
273+
IsUserDefinedMoveConstructor(ctor);
274+
}
275+
271276
bool IsDefaultedMoveConstructor(const clang::CXXConstructorDecl *ctor) {
272277
return ctor->isMoveConstructor() && !ctor->isUserProvided() &&
273278
IsUserDefinedDecl(ctor->getParent());
274279
}
275280

276-
bool IsCopyOrMoveAssignmentOrCtor(const clang::CXXMethodDecl *method) {
277-
if (const auto *ctor = clang::dyn_cast<clang::CXXConstructorDecl>(method)) {
278-
return ctor->isCopyOrMoveConstructor();
279-
}
280-
return method->isCopyAssignmentOperator() ||
281-
method->isMoveAssignmentOperator();
282-
}
283-
284281
clang::CXXConstructorDecl *
285282
GetUserDefinedCopyConstructor(const clang::RecordDecl *decl) {
286283
auto *cxx = clang::dyn_cast<clang::CXXRecordDecl>(decl);
@@ -308,7 +305,7 @@ bool HasDefaultedCopyConstructor(const clang::RecordDecl *decl) {
308305
return !cxx->defaultedCopyConstructorIsDeleted();
309306
}
310307

311-
bool IsCopyConstructible(const clang::RecordDecl *decl) {
308+
bool HasCallableCopyConstructor(const clang::RecordDecl *decl) {
312309
auto *cxx = clang::dyn_cast<clang::CXXRecordDecl>(decl);
313310
if (!cxx) {
314311
return true;
@@ -341,10 +338,13 @@ bool IsConvertibleCXXRecordDecl(const clang::CXXRecordDecl *decl) {
341338
return decl->isThisDeclarationADefinition() &&
342339
std::all_of(
343340
decl->method_begin(), decl->method_end(), [](auto *method) {
341+
auto *ctor = clang::dyn_cast<clang::CXXConstructorDecl>(method);
344342
return method->getDefinition() || method->isPureVirtual() ||
345343
method->getTemplateInstantiationPattern() ||
346344
method->getDescribedFunctionTemplate() ||
347-
IsCopyOrMoveAssignmentOrCtor(method);
345+
(ctor ? ctor->isCopyOrMoveConstructor()
346+
: method->isCopyAssignmentOperator() ||
347+
method->isMoveAssignmentOperator());
348348
});
349349
}
350350

‎cpp2rust/converter/converter_lib.h‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,16 @@ bool IsOverloadedMethod(const clang::CXXMethodDecl *decl);
6565

6666
bool IsUserDefinedCopyConstructor(const clang::CXXConstructorDecl *ctor);
6767

68+
bool IsUserDefinedMoveConstructor(const clang::CXXConstructorDecl *ctor);
69+
6870
bool IsUserDefinedCopyOrMoveConstructor(const clang::CXXConstructorDecl *ctor);
6971

7072
bool IsDefaultedMoveConstructor(const clang::CXXConstructorDecl *ctor);
7173

72-
bool IsCopyOrMoveAssignmentOrCtor(const clang::CXXMethodDecl *method);
73-
7474
clang::CXXConstructorDecl *
7575
GetUserDefinedCopyConstructor(const clang::RecordDecl *decl);
7676

77-
bool IsCopyConstructible(const clang::RecordDecl *decl);
77+
bool HasCallableCopyConstructor(const clang::RecordDecl *decl);
7878

7979
bool HasDefaultedCopyConstructor(const clang::RecordDecl *decl);
8080

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ void ConverterRefCount::AddCloneTrait(const clang::RecordDecl *decl) {
492492
return;
493493
}
494494

495-
if (!IsCopyConstructible(cxx)) {
495+
if (!HasCallableCopyConstructor(cxx)) {
496496
return;
497497
}
498498

0 commit comments

Comments
 (0)