diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index e59e756276c8d3fb995c15284e48551002658570..9538deccbe0491471cc9adfade03c677f94b2cc6 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -601,8 +601,7 @@ public: bool SupportsLanguage(lldb::LanguageType language) override; - static bool GetCXXClassName(const CompilerType &type, - std::string &class_name); + static llvm::Optional GetCXXClassName(const CompilerType &type); // Type Completion diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index aa03e3b9f4997cab7432d74115276ab01504f013..7b4034c06400ef0af72be1aa3d1b5f8930388eb2 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -2023,15 +2023,14 @@ bool ValueObject::GetBaseClassPath(Stream &s) { bool parent_had_base_class = GetParent() && GetParent()->GetBaseClassPath(s); CompilerType compiler_type = GetCompilerType(); - std::string cxx_class_name; - bool this_had_base_class = - ClangASTContext::GetCXXClassName(compiler_type, cxx_class_name); - if (this_had_base_class) { + llvm::Optional cxx_class_name = + ClangASTContext::GetCXXClassName(compiler_type); + if (cxx_class_name) { if (parent_had_base_class) s.PutCString("::"); - s.PutCString(cxx_class_name); + s.PutCString(cxx_class_name.getValue()); } - return parent_had_base_class || this_had_base_class; + return parent_had_base_class || cxx_class_name; } return false; } diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index 4a44ee0b1c738a25e30cc4b24b19d8eb0f7da098..61b08ab9f516ada8f126d07b2a5cabcf8e9cff31 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -3850,20 +3850,20 @@ bool ClangASTContext::SupportsLanguage(lldb::LanguageType language) { return ClangASTContextSupportsLanguage(language); } -bool ClangASTContext::GetCXXClassName(const CompilerType &type, - std::string &class_name) { - if (type) { - clang::QualType qual_type(ClangUtil::GetCanonicalQualType(type)); - if (!qual_type.isNull()) { - clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl(); - if (cxx_record_decl) { - class_name.assign(cxx_record_decl->getIdentifier()->getNameStart()); - return true; - } - } - } - class_name.clear(); - return false; +Optional +ClangASTContext::GetCXXClassName(const CompilerType &type) { + if (!type) + return llvm::None; + + clang::QualType qual_type(ClangUtil::GetCanonicalQualType(type)); + if (qual_type.isNull()) + return llvm::None; + + clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl(); + if (!cxx_record_decl) + return llvm::None; + + return std::string(cxx_record_decl->getIdentifier()->getNameStart()); } bool ClangASTContext::IsCXXClassType(const CompilerType &type) {