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