blob: 012611c526246ff044fbf009d5bf7748105e7f15 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- CommandContext.cpp --------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Interpreter/CommandContext.h"
11
12#include "lldb/Core/Debugger.h"
13#include "lldb/Core/StreamString.h"
14#include "lldb/Interpreter/CommandObject.h"
15#include "lldb/Interpreter/CommandReturnObject.h"
16#include "lldb/Target/Process.h"
17#include "lldb/Target/Target.h"
18#include "lldb/Target/Thread.h"
19
20using namespace lldb;
21using namespace lldb_private;
22
23CommandContext::CommandContext () :
24 m_exe_ctx ()
25{
26}
27
28CommandContext::~CommandContext ()
29{
30}
31
32Target *
33CommandContext::GetTarget()
34{
35 return Debugger::GetSharedInstance().GetCurrentTarget().get();
36}
37
38
39ExecutionContext &
40CommandContext::GetExecutionContext()
41{
42 return m_exe_ctx;
43}
44
45void
46CommandContext::Update (ExecutionContext *override_context)
47{
48 m_exe_ctx.Clear();
49
50 if (override_context != NULL)
51 {
52 m_exe_ctx.target = override_context->target;
53 m_exe_ctx.process = override_context->process;
54 m_exe_ctx.thread = override_context->thread;
55 m_exe_ctx.frame = override_context->frame;
56 }
57 else
58 {
59 TargetSP target_sp (Debugger::GetSharedInstance().GetCurrentTarget());
60 if (target_sp)
61 {
62 m_exe_ctx.process = target_sp->GetProcessSP().get();
63 if (m_exe_ctx.process && m_exe_ctx.process->IsRunning() == false)
64 {
65 m_exe_ctx.thread = m_exe_ctx.process->GetThreadList().GetCurrentThread().get();
66 if (m_exe_ctx.thread == NULL)
67 m_exe_ctx.thread = m_exe_ctx.process->GetThreadList().GetThreadAtIndex(0).get();
68 if (m_exe_ctx.thread)
69 {
70 m_exe_ctx.frame = m_exe_ctx.thread->GetCurrentFrame().get();
71 if (m_exe_ctx.frame == NULL)
72 m_exe_ctx.frame = m_exe_ctx.thread->GetStackFrameAtIndex (0).get();
73 }
74 }
75 }
76 }
77}