1//===-- ThreadPlanCallUserExpression.h --------------------------------*- 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#ifndef liblldb_ThreadPlanCallUserExpression_h_
11#define liblldb_ThreadPlanCallUserExpression_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/lldb-private.h"
18#include "lldb/Expression/ClangUserExpression.h"
19#include "lldb/Target/Thread.h"
20#include "lldb/Target/ThreadPlan.h"
21#include "lldb/Target/ThreadPlanCallFunction.h"
22
23namespace lldb_private {
24
25class ThreadPlanCallUserExpression : public ThreadPlanCallFunction
26{
27public:
28    ThreadPlanCallUserExpression (Thread &thread,
29                                  Address &function,
30                                  lldb::addr_t arg,
31                                  bool stop_other_threads,
32                                  bool unwind_on_error,
33                                  bool ignore_breakpoints,
34                                  lldb::addr_t *this_arg,
35                                  lldb::addr_t *cmd_arg,
36                                  ClangUserExpression::ClangUserExpressionSP &user_expression_sp);
37
38    virtual
39    ~ThreadPlanCallUserExpression ();
40
41    virtual void
42    GetDescription (Stream *s, lldb::DescriptionLevel level);
43
44    virtual void
45    WillPop ()
46    {
47        ThreadPlanCallFunction::WillPop();
48        if (m_user_expression_sp)
49            m_user_expression_sp.reset();
50    }
51
52    virtual lldb::StopInfoSP
53    GetRealStopInfo();
54
55protected:
56private:
57    ClangUserExpression::ClangUserExpressionSP m_user_expression_sp;    // This is currently just used to ensure the
58                                                                        // User expression the initiated this ThreadPlan
59                                                                        // lives as long as the thread plan does.
60    DISALLOW_COPY_AND_ASSIGN (ThreadPlanCallUserExpression);
61};
62
63} // namespace lldb_private
64
65#endif  // liblldb_ThreadPlanCallUserExpression_h_
66