diff options
Diffstat (limited to 'lldb/source/Interpreter/CommandContext.cpp')
-rw-r--r-- | lldb/source/Interpreter/CommandContext.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lldb/source/Interpreter/CommandContext.cpp b/lldb/source/Interpreter/CommandContext.cpp new file mode 100644 index 00000000000..012611c5262 --- /dev/null +++ b/lldb/source/Interpreter/CommandContext.cpp @@ -0,0 +1,77 @@ +//===-- CommandContext.cpp --------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Interpreter/CommandContext.h" + +#include "lldb/Core/Debugger.h" +#include "lldb/Core/StreamString.h" +#include "lldb/Interpreter/CommandObject.h" +#include "lldb/Interpreter/CommandReturnObject.h" +#include "lldb/Target/Process.h" +#include "lldb/Target/Target.h" +#include "lldb/Target/Thread.h" + +using namespace lldb; +using namespace lldb_private; + +CommandContext::CommandContext () : + m_exe_ctx () +{ +} + +CommandContext::~CommandContext () +{ +} + +Target * +CommandContext::GetTarget() +{ + return Debugger::GetSharedInstance().GetCurrentTarget().get(); +} + + +ExecutionContext & +CommandContext::GetExecutionContext() +{ + return m_exe_ctx; +} + +void +CommandContext::Update (ExecutionContext *override_context) +{ + m_exe_ctx.Clear(); + + if (override_context != NULL) + { + m_exe_ctx.target = override_context->target; + m_exe_ctx.process = override_context->process; + m_exe_ctx.thread = override_context->thread; + m_exe_ctx.frame = override_context->frame; + } + else + { + TargetSP target_sp (Debugger::GetSharedInstance().GetCurrentTarget()); + if (target_sp) + { + m_exe_ctx.process = target_sp->GetProcessSP().get(); + if (m_exe_ctx.process && m_exe_ctx.process->IsRunning() == false) + { + m_exe_ctx.thread = m_exe_ctx.process->GetThreadList().GetCurrentThread().get(); + if (m_exe_ctx.thread == NULL) + m_exe_ctx.thread = m_exe_ctx.process->GetThreadList().GetThreadAtIndex(0).get(); + if (m_exe_ctx.thread) + { + m_exe_ctx.frame = m_exe_ctx.thread->GetCurrentFrame().get(); + if (m_exe_ctx.frame == NULL) + m_exe_ctx.frame = m_exe_ctx.thread->GetStackFrameAtIndex (0).get(); + } + } + } + } +} |