1314564Sdim//===-- SBExpressionOptions.cpp ---------------------------------------------*-
2314564Sdim//C++ -*-===//
3254721Semaste//
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
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/API/SBExpressionOptions.h"
11353358Sdim#include "SBReproducerPrivate.h"
12353358Sdim#include "Utils.h"
13254721Semaste#include "lldb/API/SBStream.h"
14254721Semaste#include "lldb/Target/Target.h"
15254721Semaste
16254721Semasteusing namespace lldb;
17254721Semasteusing namespace lldb_private;
18254721Semaste
19314564SdimSBExpressionOptions::SBExpressionOptions()
20353358Sdim    : m_opaque_up(new EvaluateExpressionOptions()) {
21353358Sdim  LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBExpressionOptions);
22353358Sdim}
23254721Semaste
24353358SdimSBExpressionOptions::SBExpressionOptions(const SBExpressionOptions &rhs)
25353358Sdim    : m_opaque_up() {
26353358Sdim  LLDB_RECORD_CONSTRUCTOR(SBExpressionOptions,
27353358Sdim                          (const lldb::SBExpressionOptions &), rhs);
28353358Sdim
29353358Sdim  m_opaque_up = clone(rhs.m_opaque_up);
30254721Semaste}
31254721Semaste
32314564Sdimconst SBExpressionOptions &SBExpressionOptions::
33314564Sdimoperator=(const SBExpressionOptions &rhs) {
34353358Sdim  LLDB_RECORD_METHOD(
35353358Sdim      const lldb::SBExpressionOptions &,
36353358Sdim      SBExpressionOptions, operator=,(const lldb::SBExpressionOptions &), rhs);
37353358Sdim
38353358Sdim  if (this != &rhs)
39353358Sdim    m_opaque_up = clone(rhs.m_opaque_up);
40353358Sdim  return LLDB_RECORD_RESULT(*this);
41254721Semaste}
42254721Semaste
43314564SdimSBExpressionOptions::~SBExpressionOptions() {}
44254721Semaste
45314564Sdimbool SBExpressionOptions::GetCoerceResultToId() const {
46353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions,
47353358Sdim                                   GetCoerceResultToId);
48353358Sdim
49353358Sdim  return m_opaque_up->DoesCoerceToId();
50254721Semaste}
51254721Semaste
52314564Sdimvoid SBExpressionOptions::SetCoerceResultToId(bool coerce) {
53353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetCoerceResultToId, (bool),
54353358Sdim                     coerce);
55353358Sdim
56353358Sdim  m_opaque_up->SetCoerceToId(coerce);
57254721Semaste}
58254721Semaste
59314564Sdimbool SBExpressionOptions::GetUnwindOnError() const {
60353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions, GetUnwindOnError);
61353358Sdim
62353358Sdim  return m_opaque_up->DoesUnwindOnError();
63254721Semaste}
64254721Semaste
65314564Sdimvoid SBExpressionOptions::SetUnwindOnError(bool unwind) {
66353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetUnwindOnError, (bool),
67353358Sdim                     unwind);
68353358Sdim
69353358Sdim  m_opaque_up->SetUnwindOnError(unwind);
70254721Semaste}
71254721Semaste
72314564Sdimbool SBExpressionOptions::GetIgnoreBreakpoints() const {
73353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions,
74353358Sdim                                   GetIgnoreBreakpoints);
75353358Sdim
76353358Sdim  return m_opaque_up->DoesIgnoreBreakpoints();
77254721Semaste}
78254721Semaste
79314564Sdimvoid SBExpressionOptions::SetIgnoreBreakpoints(bool ignore) {
80353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetIgnoreBreakpoints, (bool),
81353358Sdim                     ignore);
82353358Sdim
83353358Sdim  m_opaque_up->SetIgnoreBreakpoints(ignore);
84254721Semaste}
85254721Semaste
86314564Sdimlldb::DynamicValueType SBExpressionOptions::GetFetchDynamicValue() const {
87353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::DynamicValueType, SBExpressionOptions,
88353358Sdim                                   GetFetchDynamicValue);
89353358Sdim
90353358Sdim  return m_opaque_up->GetUseDynamic();
91254721Semaste}
92254721Semaste
93314564Sdimvoid SBExpressionOptions::SetFetchDynamicValue(lldb::DynamicValueType dynamic) {
94353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetFetchDynamicValue,
95353358Sdim                     (lldb::DynamicValueType), dynamic);
96353358Sdim
97353358Sdim  m_opaque_up->SetUseDynamic(dynamic);
98254721Semaste}
99254721Semaste
100314564Sdimuint32_t SBExpressionOptions::GetTimeoutInMicroSeconds() const {
101353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBExpressionOptions,
102353358Sdim                                   GetTimeoutInMicroSeconds);
103353358Sdim
104353358Sdim  return m_opaque_up->GetTimeout() ? m_opaque_up->GetTimeout()->count() : 0;
105254721Semaste}
106254721Semaste
107314564Sdimvoid SBExpressionOptions::SetTimeoutInMicroSeconds(uint32_t timeout) {
108353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetTimeoutInMicroSeconds,
109353358Sdim                     (uint32_t), timeout);
110353358Sdim
111353358Sdim  m_opaque_up->SetTimeout(timeout == 0 ? Timeout<std::micro>(llvm::None)
112314564Sdim                                       : std::chrono::microseconds(timeout));
113254721Semaste}
114254721Semaste
115314564Sdimuint32_t SBExpressionOptions::GetOneThreadTimeoutInMicroSeconds() const {
116353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBExpressionOptions,
117353358Sdim                                   GetOneThreadTimeoutInMicroSeconds);
118353358Sdim
119353358Sdim  return m_opaque_up->GetOneThreadTimeout()
120353358Sdim             ? m_opaque_up->GetOneThreadTimeout()->count()
121353358Sdim             : 0;
122254721Semaste}
123254721Semaste
124314564Sdimvoid SBExpressionOptions::SetOneThreadTimeoutInMicroSeconds(uint32_t timeout) {
125353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions,
126353358Sdim                     SetOneThreadTimeoutInMicroSeconds, (uint32_t), timeout);
127353358Sdim
128353358Sdim  m_opaque_up->SetOneThreadTimeout(timeout == 0
129314564Sdim                                       ? Timeout<std::micro>(llvm::None)
130314564Sdim                                       : std::chrono::microseconds(timeout));
131276479Sdim}
132276479Sdim
133314564Sdimbool SBExpressionOptions::GetTryAllThreads() const {
134353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions, GetTryAllThreads);
135353358Sdim
136353358Sdim  return m_opaque_up->GetTryAllThreads();
137276479Sdim}
138276479Sdim
139314564Sdimvoid SBExpressionOptions::SetTryAllThreads(bool run_others) {
140353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetTryAllThreads, (bool),
141353358Sdim                     run_others);
142353358Sdim
143353358Sdim  m_opaque_up->SetTryAllThreads(run_others);
144254721Semaste}
145254721Semaste
146314564Sdimbool SBExpressionOptions::GetStopOthers() const {
147353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions, GetStopOthers);
148353358Sdim
149353358Sdim  return m_opaque_up->GetStopOthers();
150254721Semaste}
151254721Semaste
152314564Sdimvoid SBExpressionOptions::SetStopOthers(bool run_others) {
153353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetStopOthers, (bool),
154353358Sdim                     run_others);
155353358Sdim
156353358Sdim  m_opaque_up->SetStopOthers(run_others);
157276479Sdim}
158276479Sdim
159314564Sdimbool SBExpressionOptions::GetTrapExceptions() const {
160353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBExpressionOptions,
161353358Sdim                                   GetTrapExceptions);
162353358Sdim
163353358Sdim  return m_opaque_up->GetTrapExceptions();
164276479Sdim}
165276479Sdim
166314564Sdimvoid SBExpressionOptions::SetTrapExceptions(bool trap_exceptions) {
167353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetTrapExceptions, (bool),
168353358Sdim                     trap_exceptions);
169353358Sdim
170353358Sdim  m_opaque_up->SetTrapExceptions(trap_exceptions);
171258884Semaste}
172258884Semaste
173314564Sdimvoid SBExpressionOptions::SetLanguage(lldb::LanguageType language) {
174353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetLanguage,
175353358Sdim                     (lldb::LanguageType), language);
176353358Sdim
177353358Sdim  m_opaque_up->SetLanguage(language);
178258884Semaste}
179258884Semaste
180314564Sdimvoid SBExpressionOptions::SetCancelCallback(
181314564Sdim    lldb::ExpressionCancelCallback callback, void *baton) {
182353358Sdim  LLDB_RECORD_DUMMY(void, SBExpressionOptions, SetCancelCallback,
183353358Sdim                    (lldb::ExpressionCancelCallback, void *), callback, baton);
184353358Sdim
185353358Sdim  m_opaque_up->SetCancelCallback(callback, baton);
186276479Sdim}
187276479Sdim
188314564Sdimbool SBExpressionOptions::GetGenerateDebugInfo() {
189353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBExpressionOptions, GetGenerateDebugInfo);
190353358Sdim
191353358Sdim  return m_opaque_up->GetGenerateDebugInfo();
192276479Sdim}
193276479Sdim
194314564Sdimvoid SBExpressionOptions::SetGenerateDebugInfo(bool b) {
195353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetGenerateDebugInfo, (bool),
196353358Sdim                     b);
197353358Sdim
198353358Sdim  return m_opaque_up->SetGenerateDebugInfo(b);
199276479Sdim}
200276479Sdim
201314564Sdimbool SBExpressionOptions::GetSuppressPersistentResult() {
202353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBExpressionOptions,
203353358Sdim                             GetSuppressPersistentResult);
204353358Sdim
205353358Sdim  return m_opaque_up->GetResultIsInternal();
206276479Sdim}
207276479Sdim
208314564Sdimvoid SBExpressionOptions::SetSuppressPersistentResult(bool b) {
209353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetSuppressPersistentResult,
210353358Sdim                     (bool), b);
211353358Sdim
212353358Sdim  return m_opaque_up->SetResultIsInternal(b);
213276479Sdim}
214276479Sdim
215314564Sdimconst char *SBExpressionOptions::GetPrefix() const {
216353358Sdim  LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBExpressionOptions,
217353358Sdim                                   GetPrefix);
218353358Sdim
219353358Sdim  return m_opaque_up->GetPrefix();
220276479Sdim}
221276479Sdim
222314564Sdimvoid SBExpressionOptions::SetPrefix(const char *prefix) {
223353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetPrefix, (const char *),
224353358Sdim                     prefix);
225353358Sdim
226353358Sdim  return m_opaque_up->SetPrefix(prefix);
227288943Sdim}
228276479Sdim
229314564Sdimbool SBExpressionOptions::GetAutoApplyFixIts() {
230353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBExpressionOptions, GetAutoApplyFixIts);
231353358Sdim
232353358Sdim  return m_opaque_up->GetAutoApplyFixIts();
233288943Sdim}
234288943Sdim
235314564Sdimvoid SBExpressionOptions::SetAutoApplyFixIts(bool b) {
236353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetAutoApplyFixIts, (bool), b);
237353358Sdim
238353358Sdim  return m_opaque_up->SetAutoApplyFixIts(b);
239309124Sdim}
240309124Sdim
241314564Sdimbool SBExpressionOptions::GetTopLevel() {
242353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBExpressionOptions, GetTopLevel);
243353358Sdim
244353358Sdim  return m_opaque_up->GetExecutionPolicy() == eExecutionPolicyTopLevel;
245309124Sdim}
246309124Sdim
247314564Sdimvoid SBExpressionOptions::SetTopLevel(bool b) {
248353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetTopLevel, (bool), b);
249353358Sdim
250353358Sdim  m_opaque_up->SetExecutionPolicy(b ? eExecutionPolicyTopLevel
251353358Sdim                                    : m_opaque_up->default_execution_policy);
252309124Sdim}
253309124Sdim
254344779Sdimbool SBExpressionOptions::GetAllowJIT() {
255353358Sdim  LLDB_RECORD_METHOD_NO_ARGS(bool, SBExpressionOptions, GetAllowJIT);
256353358Sdim
257353358Sdim  return m_opaque_up->GetExecutionPolicy() != eExecutionPolicyNever;
258344779Sdim}
259344779Sdim
260344779Sdimvoid SBExpressionOptions::SetAllowJIT(bool allow) {
261353358Sdim  LLDB_RECORD_METHOD(void, SBExpressionOptions, SetAllowJIT, (bool), allow);
262353358Sdim
263353358Sdim  m_opaque_up->SetExecutionPolicy(allow ? m_opaque_up->default_execution_policy
264353358Sdim                                        : eExecutionPolicyNever);
265344779Sdim}
266344779Sdim
267314564SdimEvaluateExpressionOptions *SBExpressionOptions::get() const {
268353358Sdim  return m_opaque_up.get();
269309124Sdim}
270309124Sdim
271314564SdimEvaluateExpressionOptions &SBExpressionOptions::ref() const {
272353358Sdim  return *(m_opaque_up.get());
273254721Semaste}
274353358Sdim
275353358Sdimnamespace lldb_private {
276353358Sdimnamespace repro {
277353358Sdim
278353358Sdimtemplate <>
279353358Sdimvoid RegisterMethods<SBExpressionOptions>(Registry &R) {
280353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBExpressionOptions, ());
281353358Sdim  LLDB_REGISTER_CONSTRUCTOR(SBExpressionOptions,
282353358Sdim                            (const lldb::SBExpressionOptions &));
283353358Sdim  LLDB_REGISTER_METHOD(
284353358Sdim      const lldb::SBExpressionOptions &,
285353358Sdim      SBExpressionOptions, operator=,(const lldb::SBExpressionOptions &));
286353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetCoerceResultToId,
287353358Sdim                             ());
288353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetCoerceResultToId,
289353358Sdim                       (bool));
290353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetUnwindOnError, ());
291353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetUnwindOnError, (bool));
292353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetIgnoreBreakpoints,
293353358Sdim                             ());
294353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetIgnoreBreakpoints,
295353358Sdim                       (bool));
296353358Sdim  LLDB_REGISTER_METHOD_CONST(lldb::DynamicValueType, SBExpressionOptions,
297353358Sdim                             GetFetchDynamicValue, ());
298353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetFetchDynamicValue,
299353358Sdim                       (lldb::DynamicValueType));
300353358Sdim  LLDB_REGISTER_METHOD_CONST(uint32_t, SBExpressionOptions,
301353358Sdim                             GetTimeoutInMicroSeconds, ());
302353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetTimeoutInMicroSeconds,
303353358Sdim                       (uint32_t));
304353358Sdim  LLDB_REGISTER_METHOD_CONST(uint32_t, SBExpressionOptions,
305353358Sdim                             GetOneThreadTimeoutInMicroSeconds, ());
306353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions,
307353358Sdim                       SetOneThreadTimeoutInMicroSeconds, (uint32_t));
308353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetTryAllThreads, ());
309353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetTryAllThreads, (bool));
310353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetStopOthers, ());
311353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetStopOthers, (bool));
312353358Sdim  LLDB_REGISTER_METHOD_CONST(bool, SBExpressionOptions, GetTrapExceptions,
313353358Sdim                             ());
314353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetTrapExceptions, (bool));
315353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetLanguage,
316353358Sdim                       (lldb::LanguageType));
317353358Sdim  LLDB_REGISTER_METHOD(bool, SBExpressionOptions, GetGenerateDebugInfo, ());
318353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetGenerateDebugInfo,
319353358Sdim                       (bool));
320353358Sdim  LLDB_REGISTER_METHOD(bool, SBExpressionOptions, GetSuppressPersistentResult,
321353358Sdim                       ());
322353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetSuppressPersistentResult,
323353358Sdim                       (bool));
324353358Sdim  LLDB_REGISTER_METHOD_CONST(const char *, SBExpressionOptions, GetPrefix,
325353358Sdim                             ());
326353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetPrefix, (const char *));
327353358Sdim  LLDB_REGISTER_METHOD(bool, SBExpressionOptions, GetAutoApplyFixIts, ());
328353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetAutoApplyFixIts, (bool));
329353358Sdim  LLDB_REGISTER_METHOD(bool, SBExpressionOptions, GetTopLevel, ());
330353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetTopLevel, (bool));
331353358Sdim  LLDB_REGISTER_METHOD(bool, SBExpressionOptions, GetAllowJIT, ());
332353358Sdim  LLDB_REGISTER_METHOD(void, SBExpressionOptions, SetAllowJIT, (bool));
333353358Sdim}
334353358Sdim
335353358Sdim}
336353358Sdim}
337