82 lines · cpp
1//===-- OptionValueLanguage.cpp -------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Interpreter/OptionValueLanguage.h"10 11#include "lldb/DataFormatters/FormatManager.h"12#include "lldb/Interpreter/OptionValue.h"13#include "lldb/Symbol/TypeSystem.h"14#include "lldb/Target/Language.h"15#include "lldb/Utility/Args.h"16#include "lldb/Utility/Stream.h"17 18using namespace lldb;19using namespace lldb_private;20 21void OptionValueLanguage::DumpValue(const ExecutionContext *exe_ctx,22 Stream &strm, uint32_t dump_mask) {23 if (dump_mask & eDumpOptionType)24 strm.Printf("(%s)", GetTypeAsCString());25 if (dump_mask & eDumpOptionValue) {26 if (dump_mask & eDumpOptionType)27 strm.PutCString(" = ");28 if (m_current_value != eLanguageTypeUnknown)29 strm.PutCString(Language::GetNameForLanguageType(m_current_value));30 if (dump_mask & eDumpOptionDefaultValue &&31 m_current_value != m_default_value &&32 m_default_value != eLanguageTypeUnknown) {33 DefaultValueFormat label(strm);34 strm.PutCString(Language::GetNameForLanguageType(m_default_value));35 }36 }37}38 39llvm::json::Value40OptionValueLanguage::ToJSON(const ExecutionContext *exe_ctx) const {41 return Language::GetNameForLanguageType(m_current_value);42}43 44Status OptionValueLanguage::SetValueFromString(llvm::StringRef value,45 VarSetOperationType op) {46 Status error;47 switch (op) {48 case eVarSetOperationClear:49 Clear();50 break;51 52 case eVarSetOperationReplace:53 case eVarSetOperationAssign: {54 LanguageSet languages_for_types = Language::GetLanguagesSupportingTypeSystems();55 LanguageType new_type = Language::GetLanguageTypeFromString(value.trim());56 if (new_type && languages_for_types[new_type]) {57 m_value_was_set = true;58 m_current_value = new_type;59 } else {60 StreamString error_strm;61 error_strm.Printf("invalid language type '%s', ", value.str().c_str());62 error_strm.Printf("valid values are:\n");63 for (int bit : languages_for_types.bitvector.set_bits()) {64 auto language = (LanguageType)bit;65 error_strm.Printf(" %s\n",66 Language::GetNameForLanguageType(language));67 }68 error = Status(error_strm.GetString().str());69 }70 } break;71 72 case eVarSetOperationInsertBefore:73 case eVarSetOperationInsertAfter:74 case eVarSetOperationRemove:75 case eVarSetOperationAppend:76 case eVarSetOperationInvalid:77 error = OptionValue::SetValueFromString(value, op);78 break;79 }80 return error;81}82