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 // C Includes 13 // C++ Includes 14 // Other libraries and framework includes 15 // Project includes 16 #include "lldb/DataFormatters/FormatManager.h" 17 #include "lldb/Target/Language.h" 18 #include "lldb/Utility/Args.h" 19 #include "lldb/Utility/Stream.h" 20 21 using namespace lldb; 22 using namespace lldb_private; 23 24 void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx, 25 Stream &strm, uint32_t dump_mask) { 26 if (dump_mask & eDumpOptionType) 27 strm.Printf("(%s)", GetTypeAsCString()); 28 if (dump_mask & eDumpOptionValue) { 29 if (dump_mask & eDumpOptionType) 30 strm.PutCString(" = "); 31 if (m_current_value != eLanguageTypeUnknown) 32 strm.PutCString(Language::GetNameForLanguageType(m_current_value)); 33 } 34 } 35 36 Status OptionValueLanguage::SetValueFromString(llvm::StringRef value, 37 VarSetOperationType op) { 38 Status error; 39 switch (op) { 40 case eVarSetOperationClear: 41 Clear(); 42 break; 43 44 case eVarSetOperationReplace: 45 case eVarSetOperationAssign: { 46 ConstString lang_name(value.trim()); 47 std::set<lldb::LanguageType> languages_for_types; 48 std::set<lldb::LanguageType> languages_for_expressions; 49 Language::GetLanguagesSupportingTypeSystems(languages_for_types, 50 languages_for_expressions); 51 52 LanguageType new_type = 53 Language::GetLanguageTypeFromString(lang_name.GetStringRef()); 54 if (new_type && languages_for_types.count(new_type)) { 55 m_value_was_set = true; 56 m_current_value = new_type; 57 } else { 58 StreamString error_strm; 59 error_strm.Printf("invalid language type '%s', ", value.str().c_str()); 60 error_strm.Printf("valid values are:\n"); 61 for (lldb::LanguageType language : languages_for_types) { 62 error_strm.Printf("%s%s%s", " ", 63 Language::GetNameForLanguageType(language), "\n"); 64 } 65 error.SetErrorString(error_strm.GetString()); 66 } 67 } break; 68 69 case eVarSetOperationInsertBefore: 70 case eVarSetOperationInsertAfter: 71 case eVarSetOperationRemove: 72 case eVarSetOperationAppend: 73 case eVarSetOperationInvalid: 74 error = OptionValue::SetValueFromString(value, op); 75 break; 76 } 77 return error; 78 } 79 80 lldb::OptionValueSP OptionValueLanguage::DeepCopy() const { 81 return OptionValueSP(new OptionValueLanguage(*this)); 82 } 83