1314564Sdim//===-- SBVariablesOptions.cpp --------------------------------------*- C++
2314564Sdim//-*-===//
3285101Semaste//
4353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5353358Sdim// See https://llvm.org/LICENSE.txt for license information.
6353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7285101Semaste//
8285101Semaste//===----------------------------------------------------------------------===//
9285101Semaste
10285101Semaste#include "lldb/API/SBVariablesOptions.h"
11353358Sdim#include "SBReproducerPrivate.h"
12344779Sdim#include "lldb/API/SBTarget.h"
13344779Sdim#include "lldb/Target/Target.h"
14285101Semaste
15344779Sdim#include "lldb/lldb-private.h"
16344779Sdim
17285101Semasteusing namespace lldb;
18285101Semasteusing namespace lldb_private;
19285101Semaste
20314564Sdimclass VariablesOptionsImpl {
21285101Semastepublic:
22314564Sdim  VariablesOptionsImpl()
23314564Sdim      : m_include_arguments(false), m_include_locals(false),
24314564Sdim        m_include_statics(false), m_in_scope_only(false),
25314564Sdim        m_include_runtime_support_values(false),
26344779Sdim        m_include_recognized_arguments(eLazyBoolCalculate),
27314564Sdim        m_use_dynamic(lldb::eNoDynamicValues) {}
28285101Semaste
29314564Sdim  VariablesOptionsImpl(const VariablesOptionsImpl &) = default;
30285101Semaste
31314564Sdim  ~VariablesOptionsImpl() = default;
32314564Sdim
33314564Sdim  VariablesOptionsImpl &operator=(const VariablesOptionsImpl &) = default;
34314564Sdim
35314564Sdim  bool GetIncludeArguments() const { return m_include_arguments; }
36314564Sdim
37314564Sdim  void SetIncludeArguments(bool b) { m_include_arguments = b; }
38314564Sdim
39344779Sdim  bool GetIncludeRecognizedArguments(const lldb::TargetSP &target_sp) const {
40344779Sdim    if (m_include_recognized_arguments != eLazyBoolCalculate)
41344779Sdim        return m_include_recognized_arguments;
42344779Sdim    return target_sp ? target_sp->GetDisplayRecognizedArguments() : false;
43344779Sdim  }
44344779Sdim
45344779Sdim  void SetIncludeRecognizedArguments(bool b) {
46344779Sdim    m_include_recognized_arguments = b ? eLazyBoolYes : eLazyBoolNo;
47344779Sdim  }
48344779Sdim
49314564Sdim  bool GetIncludeLocals() const { return m_include_locals; }
50314564Sdim
51314564Sdim  void SetIncludeLocals(bool b) { m_include_locals = b; }
52314564Sdim
53314564Sdim  bool GetIncludeStatics() const { return m_include_statics; }
54314564Sdim
55314564Sdim  void SetIncludeStatics(bool b) { m_include_statics = b; }
56314564Sdim
57314564Sdim  bool GetInScopeOnly() const { return m_in_scope_only; }
58314564Sdim
59314564Sdim  void SetInScopeOnly(bool b) { m_in_scope_only = b; }
60314564Sdim
61314564Sdim  bool GetIncludeRuntimeSupportValues() const {
62314564Sdim    return m_include_runtime_support_values;
63314564Sdim  }
64314564Sdim
65314564Sdim  void SetIncludeRuntimeSupportValues(bool b) {
66314564Sdim    m_include_runtime_support_values = b;
67314564Sdim  }
68314564Sdim
69314564Sdim  lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
70314564Sdim
71314564Sdim  void SetUseDynamic(lldb::DynamicValueType d) { m_use_dynamic = d; }
72314564Sdim
73285101Semasteprivate:
74314564Sdim  bool m_include_arguments : 1;
75314564Sdim  bool m_include_locals : 1;
76314564Sdim  bool m_include_statics : 1;
77314564Sdim  bool m_in_scope_only : 1;
78314564Sdim  bool m_include_runtime_support_values : 1;
79344779Sdim  LazyBool m_include_recognized_arguments; // can be overridden with a setting
80314564Sdim  lldb::DynamicValueType m_use_dynamic;
81285101Semaste};
82285101Semaste
83314564SdimSBVariablesOptions::SBVariablesOptions()
84353358Sdim    : m_opaque_up(new VariablesOptionsImpl()) {
85353358Sdim  LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBVariablesOptions);
86353358Sdim}
87285101Semaste
88314564SdimSBVariablesOptions::SBVariablesOptions(const SBVariablesOptions &options)
89353358Sdim    : m_opaque_up(new VariablesOptionsImpl(options.ref())) {
90353358Sdim  LLDB_RECORD_CONSTRUCTOR(SBVariablesOptions,
91353358Sdim                          (const lldb::SBVariablesOptions &), options);
92353358Sdim}
93285101Semaste
94314564SdimSBVariablesOptions &SBVariablesOptions::
95314564Sdimoperator=(const SBVariablesOptions &options) {
96353358Sdim  LLDB_RECORD_METHOD(
97353358Sdim      lldb::SBVariablesOptions &,
98353358Sdim      SBVariablesOptions, operator=,(const lldb::SBVariablesOptions &),
99353358Sdim      options);
100353358Sdim
101353358Sdim  m_opaque_up.reset(new VariablesOptionsImpl(options.ref()));
102353358Sdim  return LLDB_RECORD_RESULT(*this);
103285101Semaste}
104285101Semaste
105314564SdimSBVariablesOptions::~SBVariablesOptions() = default;
106285101Semaste
107353358Sdimbool SBVariablesOptions::IsValid() const {
108353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, IsValid);
109353358Sdim  return this->operator bool();
110353358Sdim}
111353358SdimSBVariablesOptions::operator bool() const {
112353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, operator bool);
113285101Semaste
114353358Sdim  return m_opaque_up != nullptr;
115353358Sdim}
116353358Sdim
117314564Sdimbool SBVariablesOptions::GetIncludeArguments() const {
118353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions,
119353358Sdim                                   GetIncludeArguments);
120353358Sdim
121353358Sdim  return m_opaque_up->GetIncludeArguments();
122285101Semaste}
123285101Semaste
124314564Sdimvoid SBVariablesOptions::SetIncludeArguments(bool arguments) {
125353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeArguments, (bool),
126353358Sdim                     arguments);
127353358Sdim
128353358Sdim  m_opaque_up->SetIncludeArguments(arguments);
129285101Semaste}
130285101Semaste
131344779Sdimbool SBVariablesOptions::GetIncludeRecognizedArguments(
132344779Sdim    const lldb::SBTarget &target) const {
133353358Sdim  LLDB_RECORD_METHOD_CONST(bool, SBVariablesOptions,
134353358Sdim                           GetIncludeRecognizedArguments,
135353358Sdim                           (const lldb::SBTarget &), target);
136353358Sdim
137353358Sdim  return m_opaque_up->GetIncludeRecognizedArguments(target.GetSP());
138344779Sdim}
139344779Sdim
140344779Sdimvoid SBVariablesOptions::SetIncludeRecognizedArguments(bool arguments) {
141353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeRecognizedArguments,
142353358Sdim                     (bool), arguments);
143353358Sdim
144353358Sdim  m_opaque_up->SetIncludeRecognizedArguments(arguments);
145344779Sdim}
146344779Sdim
147314564Sdimbool SBVariablesOptions::GetIncludeLocals() const {
148353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetIncludeLocals);
149353358Sdim
150353358Sdim  return m_opaque_up->GetIncludeLocals();
151285101Semaste}
152285101Semaste
153314564Sdimvoid SBVariablesOptions::SetIncludeLocals(bool locals) {
154353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeLocals, (bool),
155353358Sdim                     locals);
156353358Sdim
157353358Sdim  m_opaque_up->SetIncludeLocals(locals);
158285101Semaste}
159285101Semaste
160314564Sdimbool SBVariablesOptions::GetIncludeStatics() const {
161353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetIncludeStatics);
162353358Sdim
163353358Sdim  return m_opaque_up->GetIncludeStatics();
164285101Semaste}
165285101Semaste
166314564Sdimvoid SBVariablesOptions::SetIncludeStatics(bool statics) {
167353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeStatics, (bool),
168353358Sdim                     statics);
169353358Sdim
170353358Sdim  m_opaque_up->SetIncludeStatics(statics);
171285101Semaste}
172285101Semaste
173314564Sdimbool SBVariablesOptions::GetInScopeOnly() const {
174353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions, GetInScopeOnly);
175353358Sdim
176353358Sdim  return m_opaque_up->GetInScopeOnly();
177285101Semaste}
178285101Semaste
179314564Sdimvoid SBVariablesOptions::SetInScopeOnly(bool in_scope_only) {
180353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetInScopeOnly, (bool),
181353358Sdim                     in_scope_only);
182353358Sdim
183353358Sdim  m_opaque_up->SetInScopeOnly(in_scope_only);
184285101Semaste}
185285101Semaste
186314564Sdimbool SBVariablesOptions::GetIncludeRuntimeSupportValues() const {
187353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBVariablesOptions,
188353358Sdim                                   GetIncludeRuntimeSupportValues);
189353358Sdim
190353358Sdim  return m_opaque_up->GetIncludeRuntimeSupportValues();
191285101Semaste}
192285101Semaste
193314564Sdimvoid SBVariablesOptions::SetIncludeRuntimeSupportValues(
194314564Sdim    bool runtime_support_values) {
195353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetIncludeRuntimeSupportValues,
196353358Sdim                     (bool), runtime_support_values);
197353358Sdim
198353358Sdim  m_opaque_up->SetIncludeRuntimeSupportValues(runtime_support_values);
199285101Semaste}
200285101Semaste
201314564Sdimlldb::DynamicValueType SBVariablesOptions::GetUseDynamic() const {
202353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::DynamicValueType, SBVariablesOptions,
203353358Sdim                                   GetUseDynamic);
204353358Sdim
205353358Sdim  return m_opaque_up->GetUseDynamic();
206285101Semaste}
207285101Semaste
208314564Sdimvoid SBVariablesOptions::SetUseDynamic(lldb::DynamicValueType dynamic) {
209353358Sdim  LLDB_RECORD_METHOD(void, SBVariablesOptions, SetUseDynamic,
210353358Sdim                     (lldb::DynamicValueType), dynamic);
211353358Sdim
212353358Sdim  m_opaque_up->SetUseDynamic(dynamic);
213285101Semaste}
214285101Semaste
215314564SdimVariablesOptionsImpl *SBVariablesOptions::operator->() {
216353358Sdim  return m_opaque_up.operator->();
217285101Semaste}
218285101Semaste
219314564Sdimconst VariablesOptionsImpl *SBVariablesOptions::operator->() const {
220353358Sdim  return m_opaque_up.operator->();
221285101Semaste}
222285101Semaste
223353358SdimVariablesOptionsImpl *SBVariablesOptions::get() { return m_opaque_up.get(); }
224285101Semaste
225353358SdimVariablesOptionsImpl &SBVariablesOptions::ref() { return *m_opaque_up; }
226285101Semaste
227314564Sdimconst VariablesOptionsImpl &SBVariablesOptions::ref() const {
228353358Sdim  return *m_opaque_up;
229285101Semaste}
230285101Semaste
231314564SdimSBVariablesOptions::SBVariablesOptions(VariablesOptionsImpl *lldb_object_ptr)
232353358Sdim    : m_opaque_up(std::move(lldb_object_ptr)) {}
233285101Semaste
234314564Sdimvoid SBVariablesOptions::SetOptions(VariablesOptionsImpl *lldb_object_ptr) {
235353358Sdim  m_opaque_up.reset(std::move(lldb_object_ptr));
236285101Semaste}
237353358Sdim
238353358Sdimnamespace lldb_private {
239353358Sdimnamespace repro {
240353358Sdim
241353358Sdimtemplate <>
242353358Sdimvoid RegisterMethods<SBVariablesOptions>(Registry &R) {
243353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBVariablesOptions, ());
244353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBVariablesOptions,
245353358Sdim                            (const lldb::SBVariablesOptions &));
246353358Sdim  LLDB_REGISTER_METHOD(
247353358Sdim      lldb::SBVariablesOptions &,
248353358Sdim      SBVariablesOptions, operator=,(const lldb::SBVariablesOptions &));
249353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, IsValid, ());
250353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, operator bool, ());
251353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, GetIncludeArguments,
252353358Sdim                             ());
253353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions, SetIncludeArguments, (bool));
254353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions,
255353358Sdim                             GetIncludeRecognizedArguments,
256353358Sdim                             (const lldb::SBTarget &));
257353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions,
258353358Sdim                       SetIncludeRecognizedArguments, (bool));
259353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, GetIncludeLocals, ());
260353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions, SetIncludeLocals, (bool));
261353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, GetIncludeStatics, ());
262353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions, SetIncludeStatics, (bool));
263353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions, GetInScopeOnly, ());
264353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions, SetInScopeOnly, (bool));
265353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBVariablesOptions,
266353358Sdim                             GetIncludeRuntimeSupportValues, ());
267353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions,
268353358Sdim                       SetIncludeRuntimeSupportValues, (bool));
269353358Sdim  LLDB_REGISTER_METHOD_CONST(lldb::DynamicValueType, SBVariablesOptions,
270353358Sdim                             GetUseDynamic, ());
271353358Sdim  LLDB_REGISTER_METHOD(void, SBVariablesOptions, SetUseDynamic,
272353358Sdim                       (lldb::DynamicValueType));
273353358Sdim}
274353358Sdim
275353358Sdim}
276353358Sdim}
277