Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Interpreter/OptionGroupVariable.cpp
39587 views
1
//===-- OptionGroupVariable.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/OptionGroupVariable.h"
10
11
#include "lldb/DataFormatters/DataVisualization.h"
12
#include "lldb/Host/OptionParser.h"
13
#include "lldb/Interpreter/CommandInterpreter.h"
14
#include "lldb/Target/Target.h"
15
#include "lldb/Utility/Status.h"
16
17
using namespace lldb;
18
using namespace lldb_private;
19
20
// if you add any options here, remember to update the counters in
21
// OptionGroupVariable::GetNumDefinitions()
22
static constexpr OptionDefinition g_variable_options[] = {
23
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "no-args", 'a',
24
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
25
"Omit function arguments."},
26
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "no-recognized-args", 't',
27
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
28
"Omit recognized function arguments."},
29
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "no-locals", 'l',
30
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
31
"Omit local variables."},
32
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "show-globals", 'g',
33
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
34
"Show the current frame source file global and static variables."},
35
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "show-declaration", 'c',
36
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
37
"Show variable declaration information (source file and line where the "
38
"variable was declared)."},
39
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "regex", 'r',
40
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeRegularExpression,
41
"The <variable-name> argument for name lookups are regular expressions."},
42
{LLDB_OPT_SET_1 | LLDB_OPT_SET_2, false, "scope", 's',
43
OptionParser::eNoArgument, nullptr, {}, 0, eArgTypeNone,
44
"Show variable scope (argument, local, global, static)."},
45
{LLDB_OPT_SET_1, false, "summary", 'y', OptionParser::eRequiredArgument,
46
nullptr, {}, 0, eArgTypeName,
47
"Specify the summary that the variable output should use."},
48
{LLDB_OPT_SET_2, false, "summary-string", 'z',
49
OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeName,
50
"Specify a summary string to use to format the variable output."},
51
};
52
53
static constexpr auto g_num_frame_options = 4;
54
static const auto g_variable_options_noframe =
55
llvm::ArrayRef<OptionDefinition>(g_variable_options)
56
.drop_front(g_num_frame_options);
57
58
static Status ValidateNamedSummary(const char *str, void *) {
59
if (!str || !str[0])
60
return Status("must specify a valid named summary");
61
TypeSummaryImplSP summary_sp;
62
if (!DataVisualization::NamedSummaryFormats::GetSummaryFormat(
63
ConstString(str), summary_sp))
64
return Status("must specify a valid named summary");
65
return Status();
66
}
67
68
static Status ValidateSummaryString(const char *str, void *) {
69
if (!str || !str[0])
70
return Status("must specify a non-empty summary string");
71
return Status();
72
}
73
74
OptionGroupVariable::OptionGroupVariable(bool show_frame_options)
75
: include_frame_options(show_frame_options), show_args(false),
76
show_recognized_args(false), show_locals(false), show_globals(false),
77
use_regex(false), show_scope(false), show_decl(false),
78
summary(ValidateNamedSummary), summary_string(ValidateSummaryString) {}
79
80
Status
81
OptionGroupVariable::SetOptionValue(uint32_t option_idx,
82
llvm::StringRef option_arg,
83
ExecutionContext *execution_context) {
84
Status error;
85
llvm::ArrayRef<OptionDefinition> variable_options =
86
include_frame_options ? g_variable_options : g_variable_options_noframe;
87
const int short_option = variable_options[option_idx].short_option;
88
switch (short_option) {
89
case 'r':
90
use_regex = true;
91
break;
92
case 'a':
93
show_args = false;
94
break;
95
case 'l':
96
show_locals = false;
97
break;
98
case 'g':
99
show_globals = true;
100
break;
101
case 'c':
102
show_decl = true;
103
break;
104
case 's':
105
show_scope = true;
106
break;
107
case 't':
108
show_recognized_args = false;
109
break;
110
case 'y':
111
error = summary.SetCurrentValue(option_arg);
112
break;
113
case 'z':
114
error = summary_string.SetCurrentValue(option_arg);
115
break;
116
default:
117
llvm_unreachable("Unimplemented option");
118
}
119
120
return error;
121
}
122
123
void OptionGroupVariable::OptionParsingStarting(
124
ExecutionContext *execution_context) {
125
show_args = true; // Frame option only
126
show_recognized_args = true; // Frame option only
127
show_locals = true; // Frame option only
128
show_globals = false; // Frame option only
129
show_decl = false;
130
use_regex = false;
131
show_scope = false;
132
summary.Clear();
133
summary_string.Clear();
134
}
135
136
llvm::ArrayRef<OptionDefinition> OptionGroupVariable::GetDefinitions() {
137
// Show the "--no-args", "--no-recognized-args", "--no-locals" and
138
// "--show-globals" options if we are showing frame specific options
139
return include_frame_options ? g_variable_options
140
: g_variable_options_noframe;
141
}
142
143