File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+
42264235void Converter::ConvertVarInit (clang::QualType qual_type, clang::Expr *expr) {
42274236 if (qual_type->isReferenceType () && !IsReferenceType (expr)) {
42284237 if (llvm::isa<clang::MaterializeTemporaryExpr>(expr->IgnoreImpCasts ())) {
Original file line number Diff line number Diff 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 ;
Original file line number Diff line number Diff 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+
136149bool ConverterRefCount::NeedsMut (const clang::VarDecl *decl,
137150 clang::QualType type,
138151 llvm::StringRef /* name*/ ) const {
Original file line number Diff line number Diff 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 ;
You can’t perform that action at this time.
0 commit comments