LLDB mainline
OptionGroupPythonClassWithDict.cpp
Go to the documentation of this file.
1//===-- OptionGroupPythonClassWithDict.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
10
12
13using namespace lldb;
14using namespace lldb_private;
15
17 const char *class_use, bool is_class, int class_option, int key_option,
18 int value_option, uint16_t required_options)
19 : m_is_class(is_class), m_required_options(required_options) {
20 m_key_usage_text.assign("The key for a key/value pair passed to the "
21 "implementation of a ");
22 m_key_usage_text.append(class_use);
23 m_key_usage_text.append(". Pairs can be specified more than once.");
24
25 m_value_usage_text.assign("The value for the previous key in the pair passed "
26 "to the implementation of a ");
27 m_value_usage_text.append(class_use);
28 m_value_usage_text.append(". Pairs can be specified more than once.");
29
30 m_class_usage_text.assign("The name of the ");
31 m_class_usage_text.append(m_is_class ? "class" : "function");
32 m_class_usage_text.append(" that will manage a ");
33 m_class_usage_text.append(class_use);
34 m_class_usage_text.append(".");
35
38 m_option_definition[0].long_option = "script-class";
39 m_option_definition[0].short_option = class_option;
40 m_option_definition[0].validator = nullptr;
46
49 m_option_definition[1].long_option = "structured-data-key";
50 m_option_definition[1].short_option = key_option;
51 m_option_definition[1].validator = nullptr;
57
60 m_option_definition[2].long_option = "structured-data-value";
61 m_option_definition[2].short_option = value_option;
62 m_option_definition[2].validator = nullptr;
68
71 m_option_definition[3].long_option = "python-function";
72 m_option_definition[3].short_option = class_option;
73 m_option_definition[3].validator = nullptr;
79}
80
82 uint32_t option_idx,
83 llvm::StringRef option_arg,
84 ExecutionContext *execution_context) {
86 switch (option_idx) {
87 case 0:
88 case 3: {
89 m_name.assign(std::string(option_arg));
90 } break;
91 case 1: {
92 if (!m_dict_sp)
93 m_dict_sp = std::make_shared<StructuredData::Dictionary>();
94 if (m_current_key.empty())
95 m_current_key.assign(std::string(option_arg));
96 else
97 error.SetErrorStringWithFormat("Key: \"%s\" missing value.",
98 m_current_key.c_str());
99
100 } break;
101 case 2: {
102 if (!m_dict_sp)
103 m_dict_sp = std::make_shared<StructuredData::Dictionary>();
104 if (!m_current_key.empty()) {
105 m_dict_sp->AddStringItem(m_current_key, option_arg);
106 m_current_key.clear();
107 }
108 else
109 error.SetErrorStringWithFormat("Value: \"%s\" missing matching key.",
110 option_arg.str().c_str());
111 } break;
112 default:
113 llvm_unreachable("Unimplemented option");
114 }
115 return error;
116}
117
119 ExecutionContext *execution_context) {
120 m_current_key.erase();
121 // Leave the dictionary shared pointer unset. That way you can tell that
122 // the user didn't pass any -k -v pairs. We want to be able to warn if these
123 // were passed when the function they passed won't use them.
124 m_dict_sp.reset();
125 m_name.clear();
126}
127
129 ExecutionContext *execution_context) {
131 // If we get here and there's contents in the m_current_key, somebody must
132 // have provided a key but no value.
133 if (!m_current_key.empty())
134 error.SetErrorStringWithFormat("Key: \"%s\" missing value.",
135 m_current_key.c_str());
136 return error;
137}
138
static llvm::raw_ostream & error(Stream &strm)
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
bool Test(ValueType bit) const
Test a single flag bit.
Definition: Flags.h:96
OptionGroupPythonClassWithDict(const char *class_use, bool is_class=true, int class_option='C', int key_option='k', int value_option='v', uint16_t required_options=eScriptClass|ePythonFunction)
void OptionParsingStarting(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_value, ExecutionContext *execution_context) override
Status OptionParsingFinished(ExecutionContext *execution_context) override
An error handling class.
Definition: Status.h:44
#define LLDB_OPT_SET_1
Definition: lldb-defines.h:102
#define LLDB_OPT_SET_2
Definition: lldb-defines.h:103
#define LLDB_OPT_SET_3
Definition: lldb-defines.h:104
A class that represents a running process on the host machine.
Definition: SBAddress.h:15
@ eArgTypePythonFunction
@ eArgTypePythonClass
OptionValidator * validator
If non-NULL, option is valid iff |validator->IsValid()|, otherwise always valid.
const char * long_option
Full name for this option.
const char * usage_text
Full text explaining what this options does and what (if any) argument to pass it.
bool required
This option is required (in the current usage level).
uint32_t completion_type
The kind of completion for this option.
int option_has_arg
no_argument, required_argument or optional_argument
uint32_t usage_mask
Used to mark options that can be used together.
lldb::CommandArgumentType argument_type
Type of argument this option takes.
OptionEnumValues enum_values
If not empty, an array of enum values.
int short_option
Single character for this option.