diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp b/contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp index fd46553..dd7173c 100644 --- a/contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp +++ b/contrib/llvm/tools/lldb/source/Interpreter/OptionValueLanguage.cpp @@ -16,7 +16,7 @@ #include "lldb/Core/Stream.h" #include "lldb/DataFormatters/FormatManager.h" #include "lldb/Interpreter/Args.h" -#include "lldb/Target/LanguageRuntime.h" +#include "lldb/Target/Language.h" using namespace lldb; using namespace lldb_private; @@ -30,7 +30,7 @@ OptionValueLanguage::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, u { if (dump_mask & eDumpOptionType) strm.PutCString (" = "); - strm.PutCString (LanguageRuntime::GetNameForLanguageType(m_current_value)); + strm.PutCString (Language::GetNameForLanguageType(m_current_value)); } } @@ -47,9 +47,28 @@ OptionValueLanguage::SetValueFromString (llvm::StringRef value, VarSetOperationT case eVarSetOperationReplace: case eVarSetOperationAssign: { - LanguageType new_type = LanguageRuntime::GetLanguageTypeFromString(value.data()); - m_value_was_set = true; - m_current_value = new_type; + ConstString lang_name(value.trim()); + std::set<lldb::LanguageType> languages_for_types; + std::set<lldb::LanguageType> languages_for_expressions; + Language::GetLanguagesSupportingTypeSystems(languages_for_types, languages_for_expressions); + + LanguageType new_type = Language::GetLanguageTypeFromString(lang_name.GetCString()); + if (new_type && languages_for_types.count(new_type)) + { + m_value_was_set = true; + m_current_value = new_type; + } + else + { + StreamString error_strm; + error_strm.Printf("invalid language type '%s', ", value.str().c_str()); + error_strm.Printf("valid values are:\n"); + for (lldb::LanguageType language : languages_for_types) + { + error_strm.Printf("%s%s%s", " ", Language::GetNameForLanguageType(language), "\n"); + } + error.SetErrorString(error_strm.GetData()); + } } break; |