1*0b57cec5SDimitry Andric //===-- SBVariablesOptions.cpp --------------------------------------------===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #include "lldb/API/SBVariablesOptions.h"
10*0b57cec5SDimitry Andric #include "lldb/API/SBTarget.h"
11*0b57cec5SDimitry Andric #include "lldb/Target/Target.h"
12*0b57cec5SDimitry Andric #include "lldb/Utility/Instrumentation.h"
13*0b57cec5SDimitry Andric 
14*0b57cec5SDimitry Andric #include "lldb/lldb-private.h"
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric using namespace lldb;
17*0b57cec5SDimitry Andric using namespace lldb_private;
18*0b57cec5SDimitry Andric 
19*0b57cec5SDimitry Andric class VariablesOptionsImpl {
20*0b57cec5SDimitry Andric public:
VariablesOptionsImpl()21*0b57cec5SDimitry Andric   VariablesOptionsImpl()
22*0b57cec5SDimitry Andric       : m_include_arguments(false), m_include_locals(false),
23*0b57cec5SDimitry Andric         m_include_statics(false), m_in_scope_only(false),
24*0b57cec5SDimitry Andric         m_include_runtime_support_values(false) {}
25*0b57cec5SDimitry Andric 
26*0b57cec5SDimitry Andric   VariablesOptionsImpl(const VariablesOptionsImpl &) = default;
27*0b57cec5SDimitry Andric 
28*0b57cec5SDimitry Andric   ~VariablesOptionsImpl() = default;
29*0b57cec5SDimitry Andric 
30*0b57cec5SDimitry Andric   VariablesOptionsImpl &operator=(const VariablesOptionsImpl &) = default;
31*0b57cec5SDimitry Andric 
GetIncludeArguments() const32*0b57cec5SDimitry Andric   bool GetIncludeArguments() const { return m_include_arguments; }
33*0b57cec5SDimitry Andric 
SetIncludeArguments(bool b)34*0b57cec5SDimitry Andric   void SetIncludeArguments(bool b) { m_include_arguments = b; }
35*0b57cec5SDimitry Andric 
GetIncludeRecognizedArguments(const lldb::TargetSP & target_sp) const36*0b57cec5SDimitry Andric   bool GetIncludeRecognizedArguments(const lldb::TargetSP &target_sp) const {
37*0b57cec5SDimitry Andric     if (m_include_recognized_arguments != eLazyBoolCalculate)
38*0b57cec5SDimitry Andric         return m_include_recognized_arguments;
39*0b57cec5SDimitry Andric     return target_sp ? target_sp->GetDisplayRecognizedArguments() : false;
40*0b57cec5SDimitry Andric   }
41*0b57cec5SDimitry Andric 
SetIncludeRecognizedArguments(bool b)42*0b57cec5SDimitry Andric   void SetIncludeRecognizedArguments(bool b) {
43*0b57cec5SDimitry Andric     m_include_recognized_arguments = b ? eLazyBoolYes : eLazyBoolNo;
44*0b57cec5SDimitry Andric   }
45*0b57cec5SDimitry Andric 
GetIncludeLocals() const46*0b57cec5SDimitry Andric   bool GetIncludeLocals() const { return m_include_locals; }
47*0b57cec5SDimitry Andric 
SetIncludeLocals(bool b)48*0b57cec5SDimitry Andric   void SetIncludeLocals(bool b) { m_include_locals = b; }
49*0b57cec5SDimitry Andric 
GetIncludeStatics() const50*0b57cec5SDimitry Andric   bool GetIncludeStatics() const { return m_include_statics; }
51*0b57cec5SDimitry Andric 
SetIncludeStatics(bool b)52*0b57cec5SDimitry Andric   void SetIncludeStatics(bool b) { m_include_statics = b; }
53*0b57cec5SDimitry Andric 
GetInScopeOnly() const54*0b57cec5SDimitry Andric   bool GetInScopeOnly() const { return m_in_scope_only; }
55*0b57cec5SDimitry Andric 
SetInScopeOnly(bool b)56*0b57cec5SDimitry Andric   void SetInScopeOnly(bool b) { m_in_scope_only = b; }
57*0b57cec5SDimitry Andric 
GetIncludeRuntimeSupportValues() const58*0b57cec5SDimitry Andric   bool GetIncludeRuntimeSupportValues() const {
59*0b57cec5SDimitry Andric     return m_include_runtime_support_values;
60*0b57cec5SDimitry Andric   }
61*0b57cec5SDimitry Andric 
SetIncludeRuntimeSupportValues(bool b)62*0b57cec5SDimitry Andric   void SetIncludeRuntimeSupportValues(bool b) {
63*0b57cec5SDimitry Andric     m_include_runtime_support_values = b;
64*0b57cec5SDimitry Andric   }
65*0b57cec5SDimitry Andric 
GetUseDynamic() const66*0b57cec5SDimitry Andric   lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
67*0b57cec5SDimitry Andric 
SetUseDynamic(lldb::DynamicValueType d)68*0b57cec5SDimitry Andric   void SetUseDynamic(lldb::DynamicValueType d) { m_use_dynamic = d; }
69*0b57cec5SDimitry Andric 
70*0b57cec5SDimitry Andric private:
71*0b57cec5SDimitry Andric   bool m_include_arguments : 1;
72*0b57cec5SDimitry Andric   bool m_include_locals : 1;
73*0b57cec5SDimitry Andric   bool m_include_statics : 1;
74*0b57cec5SDimitry Andric   bool m_in_scope_only : 1;
75*0b57cec5SDimitry Andric   bool m_include_runtime_support_values : 1;
76*0b57cec5SDimitry Andric   LazyBool m_include_recognized_arguments =
77*0b57cec5SDimitry Andric       eLazyBoolCalculate; // can be overridden with a setting
78*0b57cec5SDimitry Andric   lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
79*0b57cec5SDimitry Andric };
80*0b57cec5SDimitry Andric 
SBVariablesOptions()81*0b57cec5SDimitry Andric SBVariablesOptions::SBVariablesOptions()
82*0b57cec5SDimitry Andric     : m_opaque_up(new VariablesOptionsImpl()) {
83*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
84*0b57cec5SDimitry Andric }
85*0b57cec5SDimitry Andric 
SBVariablesOptions(const SBVariablesOptions & options)86*0b57cec5SDimitry Andric SBVariablesOptions::SBVariablesOptions(const SBVariablesOptions &options)
87*0b57cec5SDimitry Andric     : m_opaque_up(new VariablesOptionsImpl(options.ref())) {
88*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, options);
89*0b57cec5SDimitry Andric }
90*0b57cec5SDimitry Andric 
91*0b57cec5SDimitry Andric SBVariablesOptions &SBVariablesOptions::
operator =(const SBVariablesOptions & options)92*0b57cec5SDimitry Andric operator=(const SBVariablesOptions &options) {
93*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, options);
94*0b57cec5SDimitry Andric 
95*0b57cec5SDimitry Andric   m_opaque_up = std::make_unique<VariablesOptionsImpl>(options.ref());
96*0b57cec5SDimitry Andric   return *this;
97*0b57cec5SDimitry Andric }
98*0b57cec5SDimitry Andric 
99*0b57cec5SDimitry Andric SBVariablesOptions::~SBVariablesOptions() = default;
100*0b57cec5SDimitry Andric 
IsValid() const101*0b57cec5SDimitry Andric bool SBVariablesOptions::IsValid() const {
102*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
103*0b57cec5SDimitry Andric   return this->operator bool();
104*0b57cec5SDimitry Andric }
operator bool() const105*0b57cec5SDimitry Andric SBVariablesOptions::operator bool() const {
106*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
107*0b57cec5SDimitry Andric 
108*0b57cec5SDimitry Andric   return m_opaque_up != nullptr;
109*0b57cec5SDimitry Andric }
110*0b57cec5SDimitry Andric 
GetIncludeArguments() const111*0b57cec5SDimitry Andric bool SBVariablesOptions::GetIncludeArguments() const {
112*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
113*0b57cec5SDimitry Andric 
114*0b57cec5SDimitry Andric   return m_opaque_up->GetIncludeArguments();
115*0b57cec5SDimitry Andric }
116*0b57cec5SDimitry Andric 
SetIncludeArguments(bool arguments)117*0b57cec5SDimitry Andric void SBVariablesOptions::SetIncludeArguments(bool arguments) {
118*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, arguments);
119*0b57cec5SDimitry Andric 
120*0b57cec5SDimitry Andric   m_opaque_up->SetIncludeArguments(arguments);
121*0b57cec5SDimitry Andric }
122*0b57cec5SDimitry Andric 
GetIncludeRecognizedArguments(const lldb::SBTarget & target) const123*0b57cec5SDimitry Andric bool SBVariablesOptions::GetIncludeRecognizedArguments(
124*0b57cec5SDimitry Andric     const lldb::SBTarget &target) const {
125*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, target);
126*0b57cec5SDimitry Andric 
127*0b57cec5SDimitry Andric   return m_opaque_up->GetIncludeRecognizedArguments(target.GetSP());
128*0b57cec5SDimitry Andric }
129*0b57cec5SDimitry Andric 
SetIncludeRecognizedArguments(bool arguments)130*0b57cec5SDimitry Andric void SBVariablesOptions::SetIncludeRecognizedArguments(bool arguments) {
131*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, arguments);
132*0b57cec5SDimitry Andric 
133*0b57cec5SDimitry Andric   m_opaque_up->SetIncludeRecognizedArguments(arguments);
134*0b57cec5SDimitry Andric }
135*0b57cec5SDimitry Andric 
GetIncludeLocals() const136*0b57cec5SDimitry Andric bool SBVariablesOptions::GetIncludeLocals() const {
137*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
138*0b57cec5SDimitry Andric 
139*0b57cec5SDimitry Andric   return m_opaque_up->GetIncludeLocals();
140*0b57cec5SDimitry Andric }
141*0b57cec5SDimitry Andric 
SetIncludeLocals(bool locals)142*0b57cec5SDimitry Andric void SBVariablesOptions::SetIncludeLocals(bool locals) {
143*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, locals);
144*0b57cec5SDimitry Andric 
145*0b57cec5SDimitry Andric   m_opaque_up->SetIncludeLocals(locals);
146*0b57cec5SDimitry Andric }
147*0b57cec5SDimitry Andric 
GetIncludeStatics() const148*0b57cec5SDimitry Andric bool SBVariablesOptions::GetIncludeStatics() const {
149*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
150*0b57cec5SDimitry Andric 
151*0b57cec5SDimitry Andric   return m_opaque_up->GetIncludeStatics();
152*0b57cec5SDimitry Andric }
153*0b57cec5SDimitry Andric 
SetIncludeStatics(bool statics)154*0b57cec5SDimitry Andric void SBVariablesOptions::SetIncludeStatics(bool statics) {
155*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, statics);
156*0b57cec5SDimitry Andric 
157*0b57cec5SDimitry Andric   m_opaque_up->SetIncludeStatics(statics);
158*0b57cec5SDimitry Andric }
159*0b57cec5SDimitry Andric 
GetInScopeOnly() const160*0b57cec5SDimitry Andric bool SBVariablesOptions::GetInScopeOnly() const {
161*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
162*0b57cec5SDimitry Andric 
163*0b57cec5SDimitry Andric   return m_opaque_up->GetInScopeOnly();
164*0b57cec5SDimitry Andric }
165*0b57cec5SDimitry Andric 
SetInScopeOnly(bool in_scope_only)166*0b57cec5SDimitry Andric void SBVariablesOptions::SetInScopeOnly(bool in_scope_only) {
167*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, in_scope_only);
168*0b57cec5SDimitry Andric 
169*0b57cec5SDimitry Andric   m_opaque_up->SetInScopeOnly(in_scope_only);
170*0b57cec5SDimitry Andric }
171*0b57cec5SDimitry Andric 
GetIncludeRuntimeSupportValues() const172*0b57cec5SDimitry Andric bool SBVariablesOptions::GetIncludeRuntimeSupportValues() const {
173*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
174*0b57cec5SDimitry Andric 
175*0b57cec5SDimitry Andric   return m_opaque_up->GetIncludeRuntimeSupportValues();
176*0b57cec5SDimitry Andric }
177*0b57cec5SDimitry Andric 
SetIncludeRuntimeSupportValues(bool runtime_support_values)178*0b57cec5SDimitry Andric void SBVariablesOptions::SetIncludeRuntimeSupportValues(
179*0b57cec5SDimitry Andric     bool runtime_support_values) {
180*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, runtime_support_values);
181*0b57cec5SDimitry Andric 
182*0b57cec5SDimitry Andric   m_opaque_up->SetIncludeRuntimeSupportValues(runtime_support_values);
183*0b57cec5SDimitry Andric }
184*0b57cec5SDimitry Andric 
GetUseDynamic() const185*0b57cec5SDimitry Andric lldb::DynamicValueType SBVariablesOptions::GetUseDynamic() const {
186*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this);
187*0b57cec5SDimitry Andric 
188*0b57cec5SDimitry Andric   return m_opaque_up->GetUseDynamic();
189*0b57cec5SDimitry Andric }
190*0b57cec5SDimitry Andric 
SetUseDynamic(lldb::DynamicValueType dynamic)191*0b57cec5SDimitry Andric void SBVariablesOptions::SetUseDynamic(lldb::DynamicValueType dynamic) {
192*0b57cec5SDimitry Andric   LLDB_INSTRUMENT_VA(this, dynamic);
193*0b57cec5SDimitry Andric 
194*0b57cec5SDimitry Andric   m_opaque_up->SetUseDynamic(dynamic);
195*0b57cec5SDimitry Andric }
196*0b57cec5SDimitry Andric 
operator ->()197*0b57cec5SDimitry Andric VariablesOptionsImpl *SBVariablesOptions::operator->() {
198*0b57cec5SDimitry Andric   return m_opaque_up.operator->();
199*0b57cec5SDimitry Andric }
200*0b57cec5SDimitry Andric 
operator ->() const201*0b57cec5SDimitry Andric const VariablesOptionsImpl *SBVariablesOptions::operator->() const {
202*0b57cec5SDimitry Andric   return m_opaque_up.operator->();
203*0b57cec5SDimitry Andric }
204*0b57cec5SDimitry Andric 
get()205*0b57cec5SDimitry Andric VariablesOptionsImpl *SBVariablesOptions::get() { return m_opaque_up.get(); }
206*0b57cec5SDimitry Andric 
ref()207*0b57cec5SDimitry Andric VariablesOptionsImpl &SBVariablesOptions::ref() { return *m_opaque_up; }
208*0b57cec5SDimitry Andric 
ref() const209*0b57cec5SDimitry Andric const VariablesOptionsImpl &SBVariablesOptions::ref() const {
210*0b57cec5SDimitry Andric   return *m_opaque_up;
211*0b57cec5SDimitry Andric }
212*0b57cec5SDimitry Andric 
SBVariablesOptions(VariablesOptionsImpl * lldb_object_ptr)213*0b57cec5SDimitry Andric SBVariablesOptions::SBVariablesOptions(VariablesOptionsImpl *lldb_object_ptr)
214*0b57cec5SDimitry Andric     : m_opaque_up(std::move(lldb_object_ptr)) {}
215*0b57cec5SDimitry Andric 
SetOptions(VariablesOptionsImpl * lldb_object_ptr)216*0b57cec5SDimitry Andric void SBVariablesOptions::SetOptions(VariablesOptionsImpl *lldb_object_ptr) {
217*0b57cec5SDimitry Andric   m_opaque_up.reset(std::move(lldb_object_ptr));
218*0b57cec5SDimitry Andric }
219*0b57cec5SDimitry Andric