1 //===-- OptionValueLanguage.cpp ---------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/Interpreter/OptionValueLanguage.h" 11 12 #include "lldb/DataFormatters/FormatManager.h" 13 #include "lldb/Target/Language.h" 14 #include "lldb/Utility/Args.h" 15 #include "lldb/Utility/Stream.h" 16 17 using namespace lldb; 18 using namespace lldb_private; 19 20 void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx, 21 Stream &strm, uint32_t dump_mask) { 22 if (dump_mask & eDumpOptionType) 23 strm.Printf("(%s)", GetTypeAsCString()); 24 if (dump_mask & eDumpOptionValue) { 25 if (dump_mask & eDumpOptionType) 26 strm.PutCString(" = "); 27 if (m_current_value != eLanguageTypeUnknown) 28 strm.PutCString(Language::GetNameForLanguageType(m_current_value)); 29 } 30 } 31 32 Status OptionValueLanguage::SetValueFromString(llvm::StringRef value, 33 VarSetOperationType op) { 34 Status error; 35 switch (op) { 36 case eVarSetOperationClear: 37 Clear(); 38 break; 39 40 case eVarSetOperationReplace: 41 case eVarSetOperationAssign: { 42 ConstString lang_name(value.trim()); 43 std::set<lldb::LanguageType> languages_for_types; 44 std::set<lldb::LanguageType> languages_for_expressions; 45 Language::GetLanguagesSupportingTypeSystems(languages_for_types, 46 languages_for_expressions); 47 48 LanguageType new_type = 49 Language::GetLanguageTypeFromString(lang_name.GetStringRef()); 50 if (new_type && languages_for_types.count(new_type)) { 51 m_value_was_set = true; 52 m_current_value = new_type; 53 } else { 54 StreamString error_strm; 55 error_strm.Printf("invalid language type '%s', ", value.str().c_str()); 56 error_strm.Printf("valid values are:\n"); 57 for (lldb::LanguageType language : languages_for_types) { 58 error_strm.Printf("%s%s%s", " ", 59 Language::GetNameForLanguageType(language), "\n"); 60 } 61 error.SetErrorString(error_strm.GetString()); 62 } 63 } break; 64 65 case eVarSetOperationInsertBefore: 66 case eVarSetOperationInsertAfter: 67 case eVarSetOperationRemove: 68 case eVarSetOperationAppend: 69 case eVarSetOperationInvalid: 70 error = OptionValue::SetValueFromString(value, op); 71 break; 72 } 73 return error; 74 } 75 76 lldb::OptionValueSP OptionValueLanguage::DeepCopy() const { 77 return OptionValueSP(new OptionValueLanguage(*this)); 78 } 79