xiaobai updated this revision to Diff 233163.
xiaobai added a comment.
Add fixme
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69820/new/
https://reviews.llvm.org/D69820
Files:
lldb/include/lldb/Symbol/ClangASTContext.h
lldb/include/lldb/Symbol/TypeSystem.h
lldb/source/Core/ValueObject.cpp
lldb/source/Symbol/ClangASTContext.cpp
Index: lldb/source/Symbol/ClangASTContext.cpp
===================================================================
--- lldb/source/Symbol/ClangASTContext.cpp
+++ lldb/source/Symbol/ClangASTContext.cpp
@@ -3539,6 +3539,13 @@
return ClangASTContextSupportsLanguage(language);
}
+Optional<std::string>
+ClangASTContext::GetClassName(const CompilerType &compiler_type) {
+ if (!ClangUtil::IsClangType(compiler_type))
+ return llvm::None;
+ return GetCXXClassName(compiler_type);
+}
+
Optional<std::string>
ClangASTContext::GetCXXClassName(const CompilerType &type) {
if (!type)
Index: lldb/source/Core/ValueObject.cpp
===================================================================
--- lldb/source/Core/ValueObject.cpp
+++ lldb/source/Core/ValueObject.cpp
@@ -25,7 +25,6 @@
#include "lldb/DataFormatters/TypeValidator.h"
#include "lldb/DataFormatters/ValueObjectPrinter.h"
#include "lldb/Expression/ExpressionVariable.h"
-#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Symbol/CompileUnit.h"
#include "lldb/Symbol/CompilerType.h"
#include "lldb/Symbol/Declaration.h"
@@ -2033,20 +2032,34 @@
}
bool ValueObject::GetBaseClassPath(Stream &s) {
- if (IsBaseClass()) {
- bool parent_had_base_class =
- GetParent() && GetParent()->GetBaseClassPath(s);
- CompilerType compiler_type = GetCompilerType();
- llvm::Optional<std::string> cxx_class_name =
- ClangASTContext::GetCXXClassName(compiler_type);
- if (cxx_class_name) {
- if (parent_had_base_class)
- s.PutCString("::");
- s.PutCString(cxx_class_name.getValue());
- }
- return parent_had_base_class || cxx_class_name;
+ if (!IsBaseClass())
+ return false;
+
+ TargetSP target_sp = GetTargetSP();
+ if (!target_sp)
+ return false;
+
+ auto *type_system = GetCompilerType().GetTypeSystem();
+ if (!type_system) {
+ LLDB_LOG(
+ lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EXPRESSIONS),
+ "Unable to get TypeSystem in order to get class name in "
+ "ValueObject::GetBaseClassPath");
+ return false;
}
- return false;
+
+ llvm::Optional<std::string> class_name =
+ type_system->GetClassName(GetCompilerType());
+ bool parent_had_base_class = GetParent() && GetParent()->GetBaseClassPath(s);
+ if (class_name) {
+ if (parent_had_base_class)
+ // FIXME: This is still specific to C++. We should implement something
+ // like `GetClassSeparator` in the Language plugins to figure out what to
+ // use here.
+ s.PutCString("::");
+ s.PutCString(class_name.getValue());
+ }
+ return parent_had_base_class || class_name;
}
ValueObject *ValueObject::GetNonBaseClassParent() {
Index: lldb/include/lldb/Symbol/TypeSystem.h
===================================================================
--- lldb/include/lldb/Symbol/TypeSystem.h
+++ lldb/include/lldb/Symbol/TypeSystem.h
@@ -181,6 +181,9 @@
// Accessors
+ virtual llvm::Optional<std::string>
+ GetClassName(const CompilerType &compiler_type) = 0;
+
virtual ConstString GetTypeName(lldb::opaque_compiler_type_t type) = 0;
virtual uint32_t
Index: lldb/include/lldb/Symbol/ClangASTContext.h
===================================================================
--- lldb/include/lldb/Symbol/ClangASTContext.h
+++ lldb/include/lldb/Symbol/ClangASTContext.h
@@ -585,6 +585,9 @@
// Accessors
+ llvm::Optional<std::string>
+ GetClassName(const CompilerType &compiler_type) override;
+
ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type,
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits