180814287SRaphael Isemann //===-- SBVariablesOptions.cpp --------------------------------------------===//
251f96eebSZachary Turner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
651f96eebSZachary Turner //
751f96eebSZachary Turner //===----------------------------------------------------------------------===//
851f96eebSZachary Turner 
951f96eebSZachary Turner #include "lldb/API/SBVariablesOptions.h"
10d51402acSJonas Devlieghere #include "lldb/Utility/ReproducerInstrumentation.h"
114c7f5d5cSKuba Mracek #include "lldb/API/SBTarget.h"
124c7f5d5cSKuba Mracek #include "lldb/Target/Target.h"
134c7f5d5cSKuba Mracek 
144c7f5d5cSKuba Mracek #include "lldb/lldb-private.h"
1551f96eebSZachary Turner 
1651f96eebSZachary Turner using namespace lldb;
1751f96eebSZachary Turner using namespace lldb_private;
1851f96eebSZachary Turner 
19b9c1b51eSKate Stone class VariablesOptionsImpl {
2051f96eebSZachary Turner public:
21b9c1b51eSKate Stone   VariablesOptionsImpl()
224c7f5d5cSKuba Mracek       : m_include_arguments(false), m_include_locals(false),
234c7f5d5cSKuba Mracek         m_include_statics(false), m_in_scope_only(false),
249494c510SJonas Devlieghere         m_include_runtime_support_values(false) {}
2551f96eebSZachary Turner 
2651f96eebSZachary Turner   VariablesOptionsImpl(const VariablesOptionsImpl &) = default;
2751f96eebSZachary Turner 
2851f96eebSZachary Turner   ~VariablesOptionsImpl() = default;
2951f96eebSZachary Turner 
30b9c1b51eSKate Stone   VariablesOptionsImpl &operator=(const VariablesOptionsImpl &) = default;
3151f96eebSZachary Turner 
32b9c1b51eSKate Stone   bool GetIncludeArguments() const { return m_include_arguments; }
3351f96eebSZachary Turner 
34b9c1b51eSKate Stone   void SetIncludeArguments(bool b) { m_include_arguments = b; }
3551f96eebSZachary Turner 
364c7f5d5cSKuba Mracek   bool GetIncludeRecognizedArguments(const lldb::TargetSP &target_sp) const {
374c7f5d5cSKuba Mracek     if (m_include_recognized_arguments != eLazyBoolCalculate)
3841ae8e74SKuba Mracek         return m_include_recognized_arguments;
394c7f5d5cSKuba Mracek     return target_sp ? target_sp->GetDisplayRecognizedArguments() : false;
4041ae8e74SKuba Mracek   }
4141ae8e74SKuba Mracek 
4241ae8e74SKuba Mracek   void SetIncludeRecognizedArguments(bool b) {
434c7f5d5cSKuba Mracek     m_include_recognized_arguments = b ? eLazyBoolYes : eLazyBoolNo;
4441ae8e74SKuba Mracek   }
4541ae8e74SKuba Mracek 
46b9c1b51eSKate Stone   bool GetIncludeLocals() const { return m_include_locals; }
4751f96eebSZachary Turner 
48b9c1b51eSKate Stone   void SetIncludeLocals(bool b) { m_include_locals = b; }
4951f96eebSZachary Turner 
50b9c1b51eSKate Stone   bool GetIncludeStatics() const { return m_include_statics; }
5151f96eebSZachary Turner 
52b9c1b51eSKate Stone   void SetIncludeStatics(bool b) { m_include_statics = b; }
5351f96eebSZachary Turner 
54b9c1b51eSKate Stone   bool GetInScopeOnly() const { return m_in_scope_only; }
5551f96eebSZachary Turner 
56b9c1b51eSKate Stone   void SetInScopeOnly(bool b) { m_in_scope_only = b; }
5751f96eebSZachary Turner 
58b9c1b51eSKate Stone   bool GetIncludeRuntimeSupportValues() const {
5951f96eebSZachary Turner     return m_include_runtime_support_values;
6051f96eebSZachary Turner   }
6151f96eebSZachary Turner 
62b9c1b51eSKate Stone   void SetIncludeRuntimeSupportValues(bool b) {
6351f96eebSZachary Turner     m_include_runtime_support_values = b;
6451f96eebSZachary Turner   }
6551f96eebSZachary Turner 
66b9c1b51eSKate Stone   lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
6751f96eebSZachary Turner 
68b9c1b51eSKate Stone   void SetUseDynamic(lldb::DynamicValueType d) { m_use_dynamic = d; }
6951f96eebSZachary Turner 
7051f96eebSZachary Turner private:
7151f96eebSZachary Turner   bool m_include_arguments : 1;
7251f96eebSZachary Turner   bool m_include_locals : 1;
7351f96eebSZachary Turner   bool m_include_statics : 1;
7451f96eebSZachary Turner   bool m_in_scope_only : 1;
7551f96eebSZachary Turner   bool m_include_runtime_support_values : 1;
769494c510SJonas Devlieghere   LazyBool m_include_recognized_arguments =
779494c510SJonas Devlieghere       eLazyBoolCalculate; // can be overridden with a setting
789494c510SJonas Devlieghere   lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
7951f96eebSZachary Turner };
8051f96eebSZachary Turner 
81b9c1b51eSKate Stone SBVariablesOptions::SBVariablesOptions()
82baf5664fSJonas Devlieghere     : m_opaque_up(new VariablesOptionsImpl()) {
83baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBVariablesOptions);
84baf5664fSJonas Devlieghere }
8551f96eebSZachary Turner 
86b9c1b51eSKate Stone SBVariablesOptions::SBVariablesOptions(const SBVariablesOptions &options)
87baf5664fSJonas Devlieghere     : m_opaque_up(new VariablesOptionsImpl(options.ref())) {
88baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBVariablesOptions,
89baf5664fSJonas Devlieghere                           (const lldb::SBVariablesOptions &), options);
90baf5664fSJonas Devlieghere }
9151f96eebSZachary Turner 
92b9c1b51eSKate Stone SBVariablesOptions &SBVariablesOptions::
93b9c1b51eSKate Stone operator=(const SBVariablesOptions &options) {
94baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
95baf5664fSJonas Devlieghere       lldb::SBVariablesOptions &,
96baf5664fSJonas Devlieghere       SBVariablesOptions, operator=,(const lldb::SBVariablesOptions &),
97baf5664fSJonas Devlieghere       options);
98baf5664fSJonas Devlieghere 
991c0bbe43SJonas Devlieghere   m_opaque_up = std::make_unique<VariablesOptionsImpl>(options.ref());
100*d232abc3SJonas Devlieghere   return *this;
10151f96eebSZachary Turner }
10251f96eebSZachary Turner 
10351f96eebSZachary Turner SBVariablesOptions::~SBVariablesOptions() = default;
10451f96eebSZachary Turner 
105baf5664fSJonas Devlieghere bool SBVariablesOptions::IsValid() const {
106baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, IsValid);
1077f5237bcSPavel Labath   return this->operator bool();
1087f5237bcSPavel Labath }
1097f5237bcSPavel Labath SBVariablesOptions::operator bool() const {
1107f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, operator bool);
111baf5664fSJonas Devlieghere 
112baf5664fSJonas Devlieghere   return m_opaque_up != nullptr;
113baf5664fSJonas Devlieghere }
11451f96eebSZachary Turner 
115b9c1b51eSKate Stone bool SBVariablesOptions::GetIncludeArguments() const {
116baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions,
117baf5664fSJonas Devlieghere                                    GetIncludeArguments);
118baf5664fSJonas Devlieghere 
119d5b44036SJonas Devlieghere   return m_opaque_up->GetIncludeArguments();
12051f96eebSZachary Turner }
12151f96eebSZachary Turner 
122b9c1b51eSKate Stone void SBVariablesOptions::SetIncludeArguments(bool arguments) {
123baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeArguments, (bool),
124baf5664fSJonas Devlieghere                      arguments);
125baf5664fSJonas Devlieghere 
126d5b44036SJonas Devlieghere   m_opaque_up->SetIncludeArguments(arguments);
12751f96eebSZachary Turner }
12851f96eebSZachary Turner 
1294c7f5d5cSKuba Mracek bool SBVariablesOptions::GetIncludeRecognizedArguments(
1304c7f5d5cSKuba Mracek     const lldb::SBTarget &target) const {
131baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBVariablesOptions,
132baf5664fSJonas Devlieghere                            GetIncludeRecognizedArguments,
133baf5664fSJonas Devlieghere                            (const lldb::SBTarget &), target);
134baf5664fSJonas Devlieghere 
135d5b44036SJonas Devlieghere   return m_opaque_up->GetIncludeRecognizedArguments(target.GetSP());
13641ae8e74SKuba Mracek }
13741ae8e74SKuba Mracek 
13841ae8e74SKuba Mracek void SBVariablesOptions::SetIncludeRecognizedArguments(bool arguments) {
139baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeRecognizedArguments,
140baf5664fSJonas Devlieghere                      (bool), arguments);
141baf5664fSJonas Devlieghere 
142d5b44036SJonas Devlieghere   m_opaque_up->SetIncludeRecognizedArguments(arguments);
14341ae8e74SKuba Mracek }
14441ae8e74SKuba Mracek 
145b9c1b51eSKate Stone bool SBVariablesOptions::GetIncludeLocals() const {
146baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetIncludeLocals);
147baf5664fSJonas Devlieghere 
148d5b44036SJonas Devlieghere   return m_opaque_up->GetIncludeLocals();
14951f96eebSZachary Turner }
15051f96eebSZachary Turner 
151b9c1b51eSKate Stone void SBVariablesOptions::SetIncludeLocals(bool locals) {
152baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeLocals, (bool),
153baf5664fSJonas Devlieghere                      locals);
154baf5664fSJonas Devlieghere 
155d5b44036SJonas Devlieghere   m_opaque_up->SetIncludeLocals(locals);
15651f96eebSZachary Turner }
15751f96eebSZachary Turner 
158b9c1b51eSKate Stone bool SBVariablesOptions::GetIncludeStatics() const {
159baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetIncludeStatics);
160baf5664fSJonas Devlieghere 
161d5b44036SJonas Devlieghere   return m_opaque_up->GetIncludeStatics();
16251f96eebSZachary Turner }
16351f96eebSZachary Turner 
164b9c1b51eSKate Stone void SBVariablesOptions::SetIncludeStatics(bool statics) {
165baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeStatics, (bool),
166baf5664fSJonas Devlieghere                      statics);
167baf5664fSJonas Devlieghere 
168d5b44036SJonas Devlieghere   m_opaque_up->SetIncludeStatics(statics);
16951f96eebSZachary Turner }
17051f96eebSZachary Turner 
171b9c1b51eSKate Stone bool SBVariablesOptions::GetInScopeOnly() const {
172baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetInScopeOnly);
173baf5664fSJonas Devlieghere 
174d5b44036SJonas Devlieghere   return m_opaque_up->GetInScopeOnly();
17551f96eebSZachary Turner }
17651f96eebSZachary Turner 
177b9c1b51eSKate Stone void SBVariablesOptions::SetInScopeOnly(bool in_scope_only) {
178baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetInScopeOnly, (bool),
179baf5664fSJonas Devlieghere                      in_scope_only);
180baf5664fSJonas Devlieghere 
181d5b44036SJonas Devlieghere   m_opaque_up->SetInScopeOnly(in_scope_only);
18251f96eebSZachary Turner }
18351f96eebSZachary Turner 
184b9c1b51eSKate Stone bool SBVariablesOptions::GetIncludeRuntimeSupportValues() const {
185baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions,
186baf5664fSJonas Devlieghere                                    GetIncludeRuntimeSupportValues);
187baf5664fSJonas Devlieghere 
188d5b44036SJonas Devlieghere   return m_opaque_up->GetIncludeRuntimeSupportValues();
18951f96eebSZachary Turner }
19051f96eebSZachary Turner 
191b9c1b51eSKate Stone void SBVariablesOptions::SetIncludeRuntimeSupportValues(
192b9c1b51eSKate Stone     bool runtime_support_values) {
193baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeRuntimeSupportValues,
194baf5664fSJonas Devlieghere                      (bool), runtime_support_values);
195baf5664fSJonas Devlieghere 
196d5b44036SJonas Devlieghere   m_opaque_up->SetIncludeRuntimeSupportValues(runtime_support_values);
19751f96eebSZachary Turner }
19851f96eebSZachary Turner 
199b9c1b51eSKate Stone lldb::DynamicValueType SBVariablesOptions::GetUseDynamic() const {
200baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::DynamicValueType, SBVariablesOptions,
201baf5664fSJonas Devlieghere                                    GetUseDynamic);
202baf5664fSJonas Devlieghere 
203d5b44036SJonas Devlieghere   return m_opaque_up->GetUseDynamic();
20451f96eebSZachary Turner }
20551f96eebSZachary Turner 
206b9c1b51eSKate Stone void SBVariablesOptions::SetUseDynamic(lldb::DynamicValueType dynamic) {
207baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBVariablesOptions, SetUseDynamic,
208baf5664fSJonas Devlieghere                      (lldb::DynamicValueType), dynamic);
209baf5664fSJonas Devlieghere 
210d5b44036SJonas Devlieghere   m_opaque_up->SetUseDynamic(dynamic);
21151f96eebSZachary Turner }
21251f96eebSZachary Turner 
213b9c1b51eSKate Stone VariablesOptionsImpl *SBVariablesOptions::operator->() {
214d5b44036SJonas Devlieghere   return m_opaque_up.operator->();
21551f96eebSZachary Turner }
21651f96eebSZachary Turner 
217b9c1b51eSKate Stone const VariablesOptionsImpl *SBVariablesOptions::operator->() const {
218d5b44036SJonas Devlieghere   return m_opaque_up.operator->();
21951f96eebSZachary Turner }
22051f96eebSZachary Turner 
221d5b44036SJonas Devlieghere VariablesOptionsImpl *SBVariablesOptions::get() { return m_opaque_up.get(); }
22251f96eebSZachary Turner 
223d5b44036SJonas Devlieghere VariablesOptionsImpl &SBVariablesOptions::ref() { return *m_opaque_up; }
224b9c1b51eSKate Stone 
225b9c1b51eSKate Stone const VariablesOptionsImpl &SBVariablesOptions::ref() const {
226d5b44036SJonas Devlieghere   return *m_opaque_up;
22751f96eebSZachary Turner }
22851f96eebSZachary Turner 
229b9c1b51eSKate Stone SBVariablesOptions::SBVariablesOptions(VariablesOptionsImpl *lldb_object_ptr)
230d5b44036SJonas Devlieghere     : m_opaque_up(std::move(lldb_object_ptr)) {}
23151f96eebSZachary Turner 
232b9c1b51eSKate Stone void SBVariablesOptions::SetOptions(VariablesOptionsImpl *lldb_object_ptr) {
233d5b44036SJonas Devlieghere   m_opaque_up.reset(std::move(lldb_object_ptr));
23451f96eebSZachary Turner }
235