diff options
Diffstat (limited to 'lldb/source/Target/Language.cpp')
-rw-r--r-- | lldb/source/Target/Language.cpp | 30 |
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; } |