1//===-- OptionGroupMemoryTag.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/OptionGroupMemoryTag.h"
10
11#include "lldb/Host/OptionParser.h"
12
13using namespace lldb;
14using namespace lldb_private;
15
16static const uint32_t SHORT_OPTION_SHOW_TAGS = 0x54414753; // 'tags'
17
18OptionGroupMemoryTag::OptionGroupMemoryTag(bool note_binary /*=false*/)
19    : m_show_tags(false, false), m_option_definition{
20                                     LLDB_OPT_SET_1,
21                                     false,
22                                     "show-tags",
23                                     SHORT_OPTION_SHOW_TAGS,
24                                     OptionParser::eNoArgument,
25                                     nullptr,
26                                     {},
27                                     0,
28                                     eArgTypeNone,
29                                     note_binary
30                                         ? "Include memory tags in output "
31                                           "(does not apply to binary output)."
32                                         : "Include memory tags in output."} {}
33
34llvm::ArrayRef<OptionDefinition> OptionGroupMemoryTag::GetDefinitions() {
35  return llvm::ArrayRef(m_option_definition);
36}
37
38Status
39OptionGroupMemoryTag::SetOptionValue(uint32_t option_idx,
40                                     llvm::StringRef option_arg,
41                                     ExecutionContext *execution_context) {
42  assert(option_idx == 0 && "Only one option in memory tag group!");
43
44  switch (m_option_definition.short_option) {
45  case SHORT_OPTION_SHOW_TAGS:
46    m_show_tags.SetCurrentValue(true);
47    m_show_tags.SetOptionWasSet();
48    break;
49
50  default:
51    llvm_unreachable("Unimplemented option");
52  }
53
54  return {};
55}
56
57void OptionGroupMemoryTag::OptionParsingStarting(
58    ExecutionContext *execution_context) {
59  m_show_tags.Clear();
60}
61