1//===-- SBExecutionContext.cpp --------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/API/SBExecutionContext.h"
10#include "lldb/Utility/Instrumentation.h"
11
12#include "lldb/API/SBFrame.h"
13#include "lldb/API/SBProcess.h"
14#include "lldb/API/SBTarget.h"
15#include "lldb/API/SBThread.h"
16
17#include "lldb/Target/ExecutionContext.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22SBExecutionContext::SBExecutionContext() { LLDB_INSTRUMENT_VA(this); }
23
24SBExecutionContext::SBExecutionContext(const lldb::SBExecutionContext &rhs)
25    : m_exe_ctx_sp(rhs.m_exe_ctx_sp) {
26  LLDB_INSTRUMENT_VA(this, rhs);
27}
28
29SBExecutionContext::SBExecutionContext(
30    lldb::ExecutionContextRefSP exe_ctx_ref_sp)
31    : m_exe_ctx_sp(exe_ctx_ref_sp) {
32  LLDB_INSTRUMENT_VA(this, exe_ctx_ref_sp);
33}
34
35SBExecutionContext::SBExecutionContext(const lldb::SBTarget &target)
36    : m_exe_ctx_sp(new ExecutionContextRef()) {
37  LLDB_INSTRUMENT_VA(this, target);
38
39  m_exe_ctx_sp->SetTargetSP(target.GetSP());
40}
41
42SBExecutionContext::SBExecutionContext(const lldb::SBProcess &process)
43    : m_exe_ctx_sp(new ExecutionContextRef()) {
44  LLDB_INSTRUMENT_VA(this, process);
45
46  m_exe_ctx_sp->SetProcessSP(process.GetSP());
47}
48
49SBExecutionContext::SBExecutionContext(lldb::SBThread thread)
50    : m_exe_ctx_sp(new ExecutionContextRef()) {
51  LLDB_INSTRUMENT_VA(this, thread);
52
53  m_exe_ctx_sp->SetThreadPtr(thread.get());
54}
55
56SBExecutionContext::SBExecutionContext(const lldb::SBFrame &frame)
57    : m_exe_ctx_sp(new ExecutionContextRef()) {
58  LLDB_INSTRUMENT_VA(this, frame);
59
60  m_exe_ctx_sp->SetFrameSP(frame.GetFrameSP());
61}
62
63SBExecutionContext::~SBExecutionContext() = default;
64
65const SBExecutionContext &SBExecutionContext::
66operator=(const lldb::SBExecutionContext &rhs) {
67  LLDB_INSTRUMENT_VA(this, rhs);
68
69  m_exe_ctx_sp = rhs.m_exe_ctx_sp;
70  return *this;
71}
72
73ExecutionContextRef *SBExecutionContext::get() const {
74  return m_exe_ctx_sp.get();
75}
76
77SBTarget SBExecutionContext::GetTarget() const {
78  LLDB_INSTRUMENT_VA(this);
79
80  SBTarget sb_target;
81  if (m_exe_ctx_sp) {
82    TargetSP target_sp(m_exe_ctx_sp->GetTargetSP());
83    if (target_sp)
84      sb_target.SetSP(target_sp);
85  }
86  return sb_target;
87}
88
89SBProcess SBExecutionContext::GetProcess() const {
90  LLDB_INSTRUMENT_VA(this);
91
92  SBProcess sb_process;
93  if (m_exe_ctx_sp) {
94    ProcessSP process_sp(m_exe_ctx_sp->GetProcessSP());
95    if (process_sp)
96      sb_process.SetSP(process_sp);
97  }
98  return sb_process;
99}
100
101SBThread SBExecutionContext::GetThread() const {
102  LLDB_INSTRUMENT_VA(this);
103
104  SBThread sb_thread;
105  if (m_exe_ctx_sp) {
106    ThreadSP thread_sp(m_exe_ctx_sp->GetThreadSP());
107    if (thread_sp)
108      sb_thread.SetThread(thread_sp);
109  }
110  return sb_thread;
111}
112
113SBFrame SBExecutionContext::GetFrame() const {
114  LLDB_INSTRUMENT_VA(this);
115
116  SBFrame sb_frame;
117  if (m_exe_ctx_sp) {
118    StackFrameSP frame_sp(m_exe_ctx_sp->GetFrameSP());
119    if (frame_sp)
120      sb_frame.SetFrameSP(frame_sp);
121  }
122  return sb_frame;
123}
124