brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · bb28dc8 Raw
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