]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanShouldStopHere.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / include / lldb / Target / ThreadPlanShouldStopHere.h
1 //===-- ThreadPlanShouldStopHere.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_ThreadPlanShouldStopHere_h_
11 #define liblldb_ThreadPlanShouldStopHere_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Target/ThreadPlan.h"
18
19 namespace lldb_private {
20
21 // This is an interface that ThreadPlans can adopt to allow flexible modifications of the behavior
22 // when a thread plan comes to a place where it would ordinarily stop.  If such modification makes
23 // sense for your plan, inherit from this class, and when you would be about to stop (in your ShouldStop
24 // method), call InvokeShouldStopHereCallback, and if that returns a non-NULL plan, execute that
25 // plan instead of stopping.
26 //
27 // The classic example of the use of this is ThreadPlanStepInRange not stopping in frames that have
28 // no debug information.
29 //
30 // This class also defines a set of flags to control general aspects of this "ShouldStop" behavior.
31 // A class implementing this protocol needs to define a default set of flags, and can provide access to
32 // changing that default flag set if it wishes.
33
34 class ThreadPlanShouldStopHere
35 {
36 public:
37     enum
38     {
39         eNone = 0,
40         eAvoidInlines = (1 << 0),
41         eAvoidNoDebug = (1 << 1)
42     };
43
44     //------------------------------------------------------------------
45     // Constructors and Destructors
46     //------------------------------------------------------------------
47     ThreadPlanShouldStopHere (ThreadPlan *owner,
48                               ThreadPlanShouldStopHereCallback callback = NULL,
49                               void *baton = NULL);
50     virtual
51     ~ThreadPlanShouldStopHere();
52
53     void
54     SetShouldStopHereCallback (ThreadPlanShouldStopHereCallback callback, void *baton);
55
56     lldb::ThreadPlanSP
57     InvokeShouldStopHereCallback ();
58
59     lldb_private::Flags &
60     GetFlags ()
61     {
62         return m_flags;
63     }
64
65     const lldb_private::Flags &
66     GetFlags () const
67     {
68         return m_flags;
69     }
70
71 protected:
72     // Implement this, and call it in the plan's constructor to set the default flags.
73     virtual void SetFlagsToDefault () = 0;
74
75     //------------------------------------------------------------------
76     // Classes that inherit from ThreadPlanShouldStopHere can see and modify these
77     //------------------------------------------------------------------
78     ThreadPlanShouldStopHereCallback m_callback;
79     void * m_baton;
80     ThreadPlan *m_owner;
81     lldb_private::Flags m_flags;
82
83 private:
84     //------------------------------------------------------------------
85     // For ThreadPlanShouldStopHere only
86     //------------------------------------------------------------------
87
88     DISALLOW_COPY_AND_ASSIGN (ThreadPlanShouldStopHere);
89
90 };
91
92 } // namespace lldb_private
93
94 #endif  // liblldb_ThreadPlanShouldStopHere_h_