blob: cc925cff99707665fa96bb4bd218cc4b0bee8ca9 [file] [log] [blame]
//===-- ExecutionContext.h --------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_ExecutionContext_h_
#define liblldb_ExecutionContext_h_
#include "lldb/lldb-private.h"
namespace lldb_private {
//----------------------------------------------------------------------
/// @class ExecutionContext ExecutionContext.h "lldb/Target/ExecutionContext.h"
/// @brief A class that contains an execution context.
///
/// This baton object can be passed into any function that requires
/// a context that specifies a process, thread and frame.
///
/// Many lldb functions can evaluate or act upon a specific
/// execution context. An expression could be evaluated for a specific
/// process, thread, and frame. The thread object contains frames and
/// can return StackFrame objects given a valid frame index using:
/// StackFrame * Thread::GetFrameAtIndex (uint32_t idx).
//----------------------------------------------------------------------
class ExecutionContext
{
public:
//------------------------------------------------------------------
/// Default Constructor.
///
/// Initialize with NULL process and thread, and invalid frame
/// index.
//------------------------------------------------------------------
ExecutionContext();
ExecutionContext (Target* t, bool fill_current_process_thread_frame = true);
//------------------------------------------------------------------
/// Construct with process, thread, and frame index.
///
/// Initialize with process \a p, thread \a t, and frame index \a f.
///
/// @param[in] process
/// The process for this execution context.
///
/// @param[in] thread
/// The thread for this execution context.
///
/// @param[in] frame
/// The frame index for this execution context.
//------------------------------------------------------------------
ExecutionContext (Process* process,
Thread *thread = NULL,
StackFrame * frame = NULL);
ExecutionContext (ExecutionContextScope *exe_scope);
ExecutionContext (ExecutionContextScope &exe_scope);
//------------------------------------------------------------------
/// Clear the object's state.
///
/// Sets the process and thread to NULL, and the frame index to an
/// invalid value.
//------------------------------------------------------------------
void
Clear ();
RegisterContext *
GetRegisterContext () const;
ExecutionContextScope *
GetBestExecutionContextScope () const;
//------------------------------------------------------------------
// Member variables
//------------------------------------------------------------------
Target *target; ///< The target that owns the process/thread/frame
Process *process; ///< The process that owns the thread/frame
Thread *thread; ///< The thread that owns the frame
StackFrame *frame; ///< The stack frame in thread.
};
} // namespace lldb_private
#endif // liblldb_ExecutionContext_h_