brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · a960e39 Raw
87 lines · cpp
1//===-- OptionValueArch.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/OptionValueArch.h"10 11#include "lldb/DataFormatters/FormatManager.h"12#include "lldb/Interpreter/CommandCompletions.h"13#include "lldb/Interpreter/CommandInterpreter.h"14#include "lldb/Interpreter/OptionValue.h"15#include "lldb/Utility/Args.h"16#include "lldb/Utility/State.h"17 18using namespace lldb;19using namespace lldb_private;20 21void OptionValueArch::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,22                                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 29    if (m_current_value.IsValid()) {30      const char *arch_name = m_current_value.GetArchitectureName();31      if (arch_name)32        strm.PutCString(arch_name);33    }34 35    if (dump_mask & eDumpOptionDefaultValue &&36        m_current_value != m_default_value && m_default_value.IsValid()) {37      DefaultValueFormat label(strm);38      strm.PutCString(m_default_value.GetArchitectureName());39    }40  }41}42 43llvm::json::Value44OptionValueArch::ToJSON(const ExecutionContext *exe_ctx) const {45  if (m_current_value.IsValid())46    return llvm::json::Value(m_current_value.GetArchitectureName());47 48  return {};49}50 51Status OptionValueArch::SetValueFromString(llvm::StringRef value,52                                           VarSetOperationType op) {53  Status error;54  switch (op) {55  case eVarSetOperationClear:56    Clear();57    NotifyValueChanged();58    break;59 60  case eVarSetOperationReplace:61  case eVarSetOperationAssign: {62    std::string value_str = value.trim().str();63    if (m_current_value.SetTriple(value_str.c_str())) {64      m_value_was_set = true;65      NotifyValueChanged();66    } else67      error = Status::FromErrorStringWithFormat("unsupported architecture '%s'",68                                                value_str.c_str());69    break;70  }71  case eVarSetOperationInsertBefore:72  case eVarSetOperationInsertAfter:73  case eVarSetOperationRemove:74  case eVarSetOperationAppend:75  case eVarSetOperationInvalid:76    error = OptionValue::SetValueFromString(value, op);77    break;78  }79  return error;80}81 82void OptionValueArch::AutoComplete(CommandInterpreter &interpreter,83                                   CompletionRequest &request) {84  lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(85      interpreter, lldb::eArchitectureCompletion, request, nullptr);86}87