1b9c1b51eSKate Stone //===-- SBExpressionOptions.cpp ---------------------------------------------*-
2b9c1b51eSKate Stone //C++ -*-===//
335e1bda6SJim Ingham //
4*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
6*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
735e1bda6SJim Ingham //
835e1bda6SJim Ingham //===----------------------------------------------------------------------===//
935e1bda6SJim Ingham 
1035e1bda6SJim Ingham #include "lldb/API/SBExpressionOptions.h"
1135e1bda6SJim Ingham #include "lldb/API/SBStream.h"
1235e1bda6SJim Ingham 
1335e1bda6SJim Ingham #include "lldb/Target/Target.h"
1435e1bda6SJim Ingham 
1535e1bda6SJim Ingham using namespace lldb;
1635e1bda6SJim Ingham using namespace lldb_private;
1735e1bda6SJim Ingham 
18b9c1b51eSKate Stone SBExpressionOptions::SBExpressionOptions()
19b9c1b51eSKate Stone     : m_opaque_ap(new EvaluateExpressionOptions()) {}
2035e1bda6SJim Ingham 
21b9c1b51eSKate Stone SBExpressionOptions::SBExpressionOptions(const SBExpressionOptions &rhs) {
2235e1bda6SJim Ingham   m_opaque_ap.reset(new EvaluateExpressionOptions());
2335e1bda6SJim Ingham   *(m_opaque_ap.get()) = rhs.ref();
2435e1bda6SJim Ingham }
2535e1bda6SJim Ingham 
26b9c1b51eSKate Stone const SBExpressionOptions &SBExpressionOptions::
27b9c1b51eSKate Stone operator=(const SBExpressionOptions &rhs) {
28b9c1b51eSKate Stone   if (this != &rhs) {
2935e1bda6SJim Ingham     this->ref() = rhs.ref();
3035e1bda6SJim Ingham   }
3135e1bda6SJim Ingham   return *this;
3235e1bda6SJim Ingham }
3335e1bda6SJim Ingham 
34b9c1b51eSKate Stone SBExpressionOptions::~SBExpressionOptions() {}
3535e1bda6SJim Ingham 
36b9c1b51eSKate Stone bool SBExpressionOptions::GetCoerceResultToId() const {
3735e1bda6SJim Ingham   return m_opaque_ap->DoesCoerceToId();
3835e1bda6SJim Ingham }
3935e1bda6SJim Ingham 
40b9c1b51eSKate Stone void SBExpressionOptions::SetCoerceResultToId(bool coerce) {
4135e1bda6SJim Ingham   m_opaque_ap->SetCoerceToId(coerce);
4235e1bda6SJim Ingham }
4335e1bda6SJim Ingham 
44b9c1b51eSKate Stone bool SBExpressionOptions::GetUnwindOnError() const {
4535e1bda6SJim Ingham   return m_opaque_ap->DoesUnwindOnError();
4635e1bda6SJim Ingham }
4735e1bda6SJim Ingham 
48b9c1b51eSKate Stone void SBExpressionOptions::SetUnwindOnError(bool unwind) {
4935e1bda6SJim Ingham   m_opaque_ap->SetUnwindOnError(unwind);
5035e1bda6SJim Ingham }
5135e1bda6SJim Ingham 
52b9c1b51eSKate Stone bool SBExpressionOptions::GetIgnoreBreakpoints() const {
53184e9811SJim Ingham   return m_opaque_ap->DoesIgnoreBreakpoints();
54184e9811SJim Ingham }
55184e9811SJim Ingham 
56b9c1b51eSKate Stone void SBExpressionOptions::SetIgnoreBreakpoints(bool ignore) {
57184e9811SJim Ingham   m_opaque_ap->SetIgnoreBreakpoints(ignore);
58184e9811SJim Ingham }
59184e9811SJim Ingham 
60b9c1b51eSKate Stone lldb::DynamicValueType SBExpressionOptions::GetFetchDynamicValue() const {
6135e1bda6SJim Ingham   return m_opaque_ap->GetUseDynamic();
6235e1bda6SJim Ingham }
6335e1bda6SJim Ingham 
64b9c1b51eSKate Stone void SBExpressionOptions::SetFetchDynamicValue(lldb::DynamicValueType dynamic) {
6535e1bda6SJim Ingham   m_opaque_ap->SetUseDynamic(dynamic);
6635e1bda6SJim Ingham }
6735e1bda6SJim Ingham 
68b9c1b51eSKate Stone uint32_t SBExpressionOptions::GetTimeoutInMicroSeconds() const {
6943d35418SPavel Labath   return m_opaque_ap->GetTimeout() ? m_opaque_ap->GetTimeout()->count() : 0;
7035e1bda6SJim Ingham }
7135e1bda6SJim Ingham 
72b9c1b51eSKate Stone void SBExpressionOptions::SetTimeoutInMicroSeconds(uint32_t timeout) {
7343d35418SPavel Labath   m_opaque_ap->SetTimeout(timeout == 0 ? Timeout<std::micro>(llvm::None)
7443d35418SPavel Labath                                        : std::chrono::microseconds(timeout));
7535e1bda6SJim Ingham }
7635e1bda6SJim Ingham 
77b9c1b51eSKate Stone uint32_t SBExpressionOptions::GetOneThreadTimeoutInMicroSeconds() const {
7843d35418SPavel Labath   return m_opaque_ap->GetOneThreadTimeout() ? m_opaque_ap->GetOneThreadTimeout()->count() : 0;
79914f4e70SJim Ingham }
80914f4e70SJim Ingham 
81b9c1b51eSKate Stone void SBExpressionOptions::SetOneThreadTimeoutInMicroSeconds(uint32_t timeout) {
8243d35418SPavel Labath   m_opaque_ap->SetOneThreadTimeout(timeout == 0
8343d35418SPavel Labath                                        ? Timeout<std::micro>(llvm::None)
8443d35418SPavel Labath                                        : std::chrono::microseconds(timeout));
85914f4e70SJim Ingham }
86914f4e70SJim Ingham 
87b9c1b51eSKate Stone bool SBExpressionOptions::GetTryAllThreads() const {
886fbc48bcSJim Ingham   return m_opaque_ap->GetTryAllThreads();
8935e1bda6SJim Ingham }
9035e1bda6SJim Ingham 
91b9c1b51eSKate Stone void SBExpressionOptions::SetTryAllThreads(bool run_others) {
926fbc48bcSJim Ingham   m_opaque_ap->SetTryAllThreads(run_others);
936fbc48bcSJim Ingham }
946fbc48bcSJim Ingham 
95b9c1b51eSKate Stone bool SBExpressionOptions::GetStopOthers() const {
96286fb1efSJim Ingham   return m_opaque_ap->GetStopOthers();
97286fb1efSJim Ingham }
98286fb1efSJim Ingham 
99b9c1b51eSKate Stone void SBExpressionOptions::SetStopOthers(bool run_others) {
100286fb1efSJim Ingham   m_opaque_ap->SetStopOthers(run_others);
101286fb1efSJim Ingham }
102286fb1efSJim Ingham 
103b9c1b51eSKate Stone bool SBExpressionOptions::GetTrapExceptions() const {
1046fbc48bcSJim Ingham   return m_opaque_ap->GetTrapExceptions();
1056fbc48bcSJim Ingham }
1066fbc48bcSJim Ingham 
107b9c1b51eSKate Stone void SBExpressionOptions::SetTrapExceptions(bool trap_exceptions) {
1086fbc48bcSJim Ingham   m_opaque_ap->SetTrapExceptions(trap_exceptions);
10935e1bda6SJim Ingham }
11035e1bda6SJim Ingham 
111b9c1b51eSKate Stone void SBExpressionOptions::SetLanguage(lldb::LanguageType language) {
112705b1809SJason Molenda   m_opaque_ap->SetLanguage(language);
113705b1809SJason Molenda }
114705b1809SJason Molenda 
115b9c1b51eSKate Stone void SBExpressionOptions::SetCancelCallback(
116b9c1b51eSKate Stone     lldb::ExpressionCancelCallback callback, void *baton) {
1171624a2d3SJim Ingham   m_opaque_ap->SetCancelCallback(callback, baton);
1181624a2d3SJim Ingham }
1191624a2d3SJim Ingham 
120b9c1b51eSKate Stone bool SBExpressionOptions::GetGenerateDebugInfo() {
121205ca1e8SGreg Clayton   return m_opaque_ap->GetGenerateDebugInfo();
122205ca1e8SGreg Clayton }
123205ca1e8SGreg Clayton 
124b9c1b51eSKate Stone void SBExpressionOptions::SetGenerateDebugInfo(bool b) {
125205ca1e8SGreg Clayton   return m_opaque_ap->SetGenerateDebugInfo(b);
126205ca1e8SGreg Clayton }
127205ca1e8SGreg Clayton 
128b9c1b51eSKate Stone bool SBExpressionOptions::GetSuppressPersistentResult() {
1297ab079b6SJim Ingham   return m_opaque_ap->GetResultIsInternal();
1307ab079b6SJim Ingham }
1317ab079b6SJim Ingham 
132b9c1b51eSKate Stone void SBExpressionOptions::SetSuppressPersistentResult(bool b) {
1337ab079b6SJim Ingham   return m_opaque_ap->SetResultIsInternal(b);
1347ab079b6SJim Ingham }
1357ab079b6SJim Ingham 
136b9c1b51eSKate Stone const char *SBExpressionOptions::GetPrefix() const {
1374e1042e1SGreg Clayton   return m_opaque_ap->GetPrefix();
1384e1042e1SGreg Clayton }
1394e1042e1SGreg Clayton 
140b9c1b51eSKate Stone void SBExpressionOptions::SetPrefix(const char *prefix) {
1414e1042e1SGreg Clayton   return m_opaque_ap->SetPrefix(prefix);
1424e1042e1SGreg Clayton }
1437ab079b6SJim Ingham 
144b9c1b51eSKate Stone bool SBExpressionOptions::GetAutoApplyFixIts() {
145a1e541bfSJim Ingham   return m_opaque_ap->GetAutoApplyFixIts();
146a1e541bfSJim Ingham }
147a1e541bfSJim Ingham 
148b9c1b51eSKate Stone void SBExpressionOptions::SetAutoApplyFixIts(bool b) {
149a1e541bfSJim Ingham   return m_opaque_ap->SetAutoApplyFixIts(b);
150a1e541bfSJim Ingham }
151a1e541bfSJim Ingham 
152b9c1b51eSKate Stone bool SBExpressionOptions::GetTopLevel() {
153863fab69SSean Callanan   return m_opaque_ap->GetExecutionPolicy() == eExecutionPolicyTopLevel;
154863fab69SSean Callanan }
155863fab69SSean Callanan 
156b9c1b51eSKate Stone void SBExpressionOptions::SetTopLevel(bool b) {
157b9c1b51eSKate Stone   m_opaque_ap->SetExecutionPolicy(b ? eExecutionPolicyTopLevel
158b9c1b51eSKate Stone                                     : m_opaque_ap->default_execution_policy);
159863fab69SSean Callanan }
160863fab69SSean Callanan 
161ab639986SJim Ingham bool SBExpressionOptions::GetAllowJIT() {
162ab639986SJim Ingham   return m_opaque_ap->GetExecutionPolicy() != eExecutionPolicyNever;
163ab639986SJim Ingham }
164ab639986SJim Ingham 
165ab639986SJim Ingham void SBExpressionOptions::SetAllowJIT(bool allow) {
166ab639986SJim Ingham   m_opaque_ap->SetExecutionPolicy(allow ? m_opaque_ap->default_execution_policy
167ab639986SJim Ingham                                     : eExecutionPolicyNever);
168ab639986SJim Ingham }
169ab639986SJim Ingham 
170b9c1b51eSKate Stone EvaluateExpressionOptions *SBExpressionOptions::get() const {
17135e1bda6SJim Ingham   return m_opaque_ap.get();
17235e1bda6SJim Ingham }
17335e1bda6SJim Ingham 
174b9c1b51eSKate Stone EvaluateExpressionOptions &SBExpressionOptions::ref() const {
17535e1bda6SJim Ingham   return *(m_opaque_ap.get());
17635e1bda6SJim Ingham }
177