diff options
Diffstat (limited to 'lldb/source/Interpreter/OptionValueFormat.cpp')
| -rw-r--r-- | lldb/source/Interpreter/OptionValueFormat.cpp | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/lldb/source/Interpreter/OptionValueFormat.cpp b/lldb/source/Interpreter/OptionValueFormat.cpp new file mode 100644 index 000000000000..ba5a44c270da --- /dev/null +++ b/lldb/source/Interpreter/OptionValueFormat.cpp @@ -0,0 +1,62 @@ +//===-- OptionValueFormat.cpp -----------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/Interpreter/OptionValueFormat.h" + +#include "lldb/DataFormatters/FormatManager.h" +#include "lldb/Interpreter/OptionArgParser.h" +#include "lldb/Utility/Stream.h" + +using namespace lldb; +using namespace lldb_private; + +void OptionValueFormat::DumpValue(const ExecutionContext *exe_ctx, Stream &strm, +                                  uint32_t dump_mask) { +  if (dump_mask & eDumpOptionType) +    strm.Printf("(%s)", GetTypeAsCString()); +  if (dump_mask & eDumpOptionValue) { +    if (dump_mask & eDumpOptionType) +      strm.PutCString(" = "); +    strm.PutCString(FormatManager::GetFormatAsCString(m_current_value)); +  } +} + +Status OptionValueFormat::SetValueFromString(llvm::StringRef value, +                                             VarSetOperationType op) { +  Status error; +  switch (op) { +  case eVarSetOperationClear: +    Clear(); +    NotifyValueChanged(); +    break; + +  case eVarSetOperationReplace: +  case eVarSetOperationAssign: { +    Format new_format; +    error = OptionArgParser::ToFormat(value.str().c_str(), new_format, nullptr); +    if (error.Success()) { +      m_value_was_set = true; +      m_current_value = new_format; +      NotifyValueChanged(); +    } +  } break; + +  case eVarSetOperationInsertBefore: +  case eVarSetOperationInsertAfter: +  case eVarSetOperationRemove: +  case eVarSetOperationAppend: +  case eVarSetOperationInvalid: +    error = OptionValue::SetValueFromString(value, op); +    break; +  } +  return error; +} + +lldb::OptionValueSP OptionValueFormat::DeepCopy() const { +  return OptionValueSP(new OptionValueFormat(*this)); +}  | 
