Path: blob/main/contrib/llvm-project/lldb/source/Interpreter/OptionValueLanguage.cpp
39587 views
//===-- OptionValueLanguage.cpp -------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Interpreter/OptionValueLanguage.h"910#include "lldb/DataFormatters/FormatManager.h"11#include "lldb/Target/Language.h"12#include "lldb/Symbol/TypeSystem.h"13#include "lldb/Utility/Args.h"14#include "lldb/Utility/Stream.h"1516using namespace lldb;17using namespace lldb_private;1819void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx,20Stream &strm, uint32_t dump_mask) {21if (dump_mask & eDumpOptionType)22strm.Printf("(%s)", GetTypeAsCString());23if (dump_mask & eDumpOptionValue) {24if (dump_mask & eDumpOptionType)25strm.PutCString(" = ");26if (m_current_value != eLanguageTypeUnknown)27strm.PutCString(Language::GetNameForLanguageType(m_current_value));28}29}3031llvm::json::Value OptionValueLanguage::ToJSON(const ExecutionContext *exe_ctx) {32return Language::GetNameForLanguageType(m_current_value);33}3435Status OptionValueLanguage::SetValueFromString(llvm::StringRef value,36VarSetOperationType op) {37Status error;38switch (op) {39case eVarSetOperationClear:40Clear();41break;4243case eVarSetOperationReplace:44case eVarSetOperationAssign: {45LanguageSet languages_for_types = Language::GetLanguagesSupportingTypeSystems();46LanguageType new_type = Language::GetLanguageTypeFromString(value.trim());47if (new_type && languages_for_types[new_type]) {48m_value_was_set = true;49m_current_value = new_type;50} else {51StreamString error_strm;52error_strm.Printf("invalid language type '%s', ", value.str().c_str());53error_strm.Printf("valid values are:\n");54for (int bit : languages_for_types.bitvector.set_bits()) {55auto language = (LanguageType)bit;56error_strm.Printf(" %s\n",57Language::GetNameForLanguageType(language));58}59error.SetErrorString(error_strm.GetString());60}61} break;6263case eVarSetOperationInsertBefore:64case eVarSetOperationInsertAfter:65case eVarSetOperationRemove:66case eVarSetOperationAppend:67case eVarSetOperationInvalid:68error = OptionValue::SetValueFromString(value, op);69break;70}71return error;72}737475