1//===-- OptionValueLanguage.cpp ---------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "lldb/Interpreter/OptionValueLanguage.h" 10 11#include "lldb/DataFormatters/FormatManager.h" 12#include "lldb/Target/Language.h" 13#include "lldb/Symbol/TypeSystem.h" 14#include "lldb/Utility/Args.h" 15#include "lldb/Utility/Stream.h" 16 17using namespace lldb; 18using namespace lldb_private; 19 20void 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 32Status 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 LanguageSet languages_for_types = Language::GetLanguagesSupportingTypeSystems(); 44 LanguageType new_type = 45 Language::GetLanguageTypeFromString(lang_name.GetStringRef()); 46 if (new_type && languages_for_types[new_type]) { 47 m_value_was_set = true; 48 m_current_value = new_type; 49 } else { 50 StreamString error_strm; 51 error_strm.Printf("invalid language type '%s', ", value.str().c_str()); 52 error_strm.Printf("valid values are:\n"); 53 for (int bit : languages_for_types.bitvector.set_bits()) { 54 auto language = (LanguageType)bit; 55 error_strm.Printf(" %s\n", 56 Language::GetNameForLanguageType(language)); 57 } 58 error.SetErrorString(error_strm.GetString()); 59 } 60 } break; 61 62 case eVarSetOperationInsertBefore: 63 case eVarSetOperationInsertAfter: 64 case eVarSetOperationRemove: 65 case eVarSetOperationAppend: 66 case eVarSetOperationInvalid: 67 error = OptionValue::SetValueFromString(value, op); 68 break; 69 } 70 return error; 71} 72 73lldb::OptionValueSP OptionValueLanguage::DeepCopy() const { 74 return OptionValueSP(new OptionValueLanguage(*this)); 75} 76