1//===-- OptionValueChar.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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/Interpreter/OptionValueChar.h"
10
11#include "lldb/Interpreter/OptionArgParser.h"
12#include "lldb/Utility/Stream.h"
13#include "lldb/Utility/StringList.h"
14#include "llvm/ADT/STLExtras.h"
15
16using namespace lldb;
17using namespace lldb_private;
18
19void OptionValueChar::DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
20                                uint32_t dump_mask) {
21  if (dump_mask & eDumpOptionType)
22    strm.Printf("(%s)", GetTypeAsCString());
23
24  if (dump_mask & eDumpOptionValue) {
25    if (dump_mask & eDumpOptionType)
26      strm.PutCString(" = ");
27    if (m_current_value != '\0')
28      strm.PutChar(m_current_value);
29    else
30      strm.PutCString("(null)");
31  }
32}
33
34Status OptionValueChar::SetValueFromString(llvm::StringRef value,
35                                           VarSetOperationType op) {
36  Status error;
37  switch (op) {
38  case eVarSetOperationClear:
39    Clear();
40    break;
41
42  case eVarSetOperationReplace:
43  case eVarSetOperationAssign: {
44    bool success = false;
45    char char_value = OptionArgParser::ToChar(value, '\0', &success);
46    if (success) {
47      m_current_value = char_value;
48      m_value_was_set = true;
49    } else
50      error.SetErrorStringWithFormat("'%s' cannot be longer than 1 character",
51                                     value.str().c_str());
52  } break;
53
54  default:
55    error = OptionValue::SetValueFromString(value, op);
56    break;
57  }
58  return error;
59}
60