aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Target/Language.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/Language.cpp')
-rw-r--r--lldb/source/Target/Language.cpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index d4a9268..395718e 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -271,6 +271,10 @@ const char *Language::GetNameForLanguageType(LanguageType language) {
return language_names[eLanguageTypeUnknown].name;
}
+llvm::StringRef Language::GetDisplayNameForLanguageType(LanguageType language) {
+ return SourceLanguage(language).GetDescription();
+}
+
void Language::PrintSupportedLanguagesForExpressions(Stream &s,
llvm::StringRef prefix,
llvm::StringRef suffix) {
@@ -543,9 +547,26 @@ Language::Language() = default;
// Destructor
Language::~Language() = default;
+static std::optional<llvm::dwarf::SourceLanguage>
+ToDwarfSourceLanguage(lldb::LanguageType language_type) {
+ if (language_type < lldb::eLanguageTypeLastStandardLanguage)
+ return static_cast<llvm::dwarf::SourceLanguage>(language_type);
+
+ switch (language_type) {
+ case eLanguageTypeMipsAssembler:
+ return llvm::dwarf::DW_LANG_Mips_Assembler;
+ default:
+ return std::nullopt;
+ }
+}
+
SourceLanguage::SourceLanguage(lldb::LanguageType language_type) {
- auto lname =
- llvm::dwarf::toDW_LNAME((llvm::dwarf::SourceLanguage)language_type);
+ std::optional<llvm::dwarf::SourceLanguage> dwarf_lang =
+ ToDwarfSourceLanguage(language_type);
+ if (!dwarf_lang)
+ return;
+
+ auto lname = llvm::dwarf::toDW_LNAME(*dwarf_lang);
if (!lname)
return;
name = lname->first;
@@ -560,11 +581,8 @@ lldb::LanguageType SourceLanguage::AsLanguageType() const {
}
llvm::StringRef SourceLanguage::GetDescription() const {
- LanguageType type = AsLanguageType();
- if (type)
- return Language::GetNameForLanguageType(type);
return llvm::dwarf::LanguageDescription(
- (llvm::dwarf::SourceLanguageName)name);
+ static_cast<llvm::dwarf::SourceLanguageName>(name));
}
bool SourceLanguage::IsC() const { return name == llvm::dwarf::DW_LNAME_C; }