Skip to content

Commit 9c7a0d5

Browse files
committed
Fix overloaded names in unsafe vs refcount
1 parent de0dfa2 commit 9c7a0d5

4 files changed

Lines changed: 29 additions & 4 deletions

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4122,10 +4122,7 @@ Converter::GetOverloadedFunctionName(const clang::FunctionDecl *decl) {
41224122
}
41234123

41244124
for (auto *parameter : decl->parameters()) {
4125-
name += GetUnsafeTypeAsString(parameter->getType());
4126-
if (parameter->getType()->isRValueReferenceType()) {
4127-
name += "_rv";
4128-
}
4125+
name += GetOverloadParamTypeAsString(parameter->getType());
41294126
name += '_';
41304127
}
41314128

@@ -4223,6 +4220,18 @@ std::string Converter::GetUnsafeTypeAsString(clang::QualType qual_type) const {
42234220
return std::string(Trim(type_as_string));
42244221
}
42254222

4223+
std::string
4224+
Converter::GetOverloadParamTypeAsString(clang::QualType type) const {
4225+
auto str = GetUnsafeTypeAsString(type);
4226+
if (type->isVoidPointerType() && type->getPointeeType().isConstQualified()) {
4227+
str += "_const";
4228+
}
4229+
if (type->isRValueReferenceType()) {
4230+
name += "_rv";
4231+
}
4232+
return str;
4233+
}
4234+
42264235
void Converter::ConvertVarInit(clang::QualType qual_type, clang::Expr *expr) {
42274236
if (qual_type->isReferenceType() && !IsReferenceType(expr)) {
42284237
if (llvm::isa<clang::MaterializeTemporaryExpr>(expr->IgnoreImpCasts())) {

‎cpp2rust/converter/converter.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
588588
GetStructAttributes(const clang::RecordDecl *decl);
589589

590590
virtual std::string GetUnsafeTypeAsString(clang::QualType qual_type) const;
591+
virtual std::string GetOverloadParamTypeAsString(clang::QualType type) const;
591592

592593
virtual bool NeedsMut(const clang::VarDecl *decl, clang::QualType type,
593594
llvm::StringRef name) const;

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,19 @@ ConverterRefCount::GetSafeTypeAsString(clang::QualType qual_type) const {
133133
return std::string(Trim(type_as_string));
134134
}
135135

136+
std::string
137+
ConverterRefCount::GetOverloadParamTypeAsString(clang::QualType type) const {
138+
auto str = GetSafeTypeAsString(type);
139+
if ((type->isPointerType() || type->isReferenceType()) &&
140+
type->getPointeeType().isConstQualified()) {
141+
str += "_const";
142+
}
143+
if (type->isRValueReferenceType()) {
144+
name += "_rv";
145+
}
146+
return str;
147+
}
148+
136149
bool ConverterRefCount::NeedsMut(const clang::VarDecl *decl,
137150
clang::QualType type,
138151
llvm::StringRef /*name*/) const {

‎cpp2rust/converter/models/converter_refcount.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ class ConverterRefCount final : public Converter {
329329
std::string ConvertSubscriptIndex(clang::Expr *idx);
330330

331331
std::string GetSafeTypeAsString(clang::QualType qual_type) const;
332+
std::string
333+
GetOverloadParamTypeAsString(clang::QualType type) const override;
332334

333335
bool NeedsMut(const clang::VarDecl *decl, clang::QualType type,
334336
llvm::StringRef /*name*/) const override;

0 commit comments

Comments
 (0)