Skip to content

Commit 167832e

Browse files
committed
Key member on the receiver
1 parent 49b22db commit 167832e

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

‎cpp2rust/converter/rules/rule_keys.cpp‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const clang::Decl *getParent(clang::QualType type) {
3232
spec->getTemplateName().getAsTemplateDecl())) {
3333
return tmpl->getCanonicalDecl();
3434
}
35-
return nullptr;
3635
}
3736
auto record = type->getAsCXXRecordDecl();
3837
if (!record) {
@@ -149,6 +148,9 @@ std::optional<ExprKey> getExprKey(clang::ASTContext &ctx,
149148
return getConstructorKey(getParent(construct->getTypeAsWritten()));
150149
}
151150
if (auto call = llvm::dyn_cast<clang::CallExpr>(expr)) {
151+
if (llvm::isa<clang::CXXMemberCallExpr>(call)) {
152+
return getExprKey(ctx, call->getCallee());
153+
}
152154
if (auto callee = call->getDirectCallee()) {
153155
return getDeclKey(callee);
154156
}
@@ -174,7 +176,9 @@ std::optional<ExprKey> getExprKey(clang::ASTContext &ctx,
174176
sm, ctx.getLangOpts());
175177
return Unqualified{clang::DeclarationName(&ctx.Idents.get(macro))};
176178
}
177-
return getDeclKey(member->getMemberDecl());
179+
return getMemberKey(
180+
getParent(member->getBase()->IgnoreImpCasts()->getType()),
181+
member->getMemberDecl()->getDeclName());
178182
}
179183
if (auto ref = llvm::dyn_cast<clang::DeclRefExpr>(expr)) {
180184
return getDeclKey(ref->getDecl());

0 commit comments

Comments
 (0)