]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointResolverName.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Breakpoint / BreakpointResolverName.h
1 //===-- BreakpointResolverName.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_BreakpointResolverName_h_
11 #define liblldb_BreakpointResolverName_h_
12
13 // C Includes
14 // C++ Includes
15 #include <vector>
16 #include <string>
17 // Other libraries and framework includes
18 // Project includes
19 #include "lldb/Breakpoint/BreakpointResolver.h"
20
21 namespace lldb_private {
22
23 //----------------------------------------------------------------------
24 /// @class BreakpointResolverName BreakpointResolverName.h "lldb/Breakpoint/BreakpointResolverName.h"
25 /// @brief This class sets breakpoints on a given function name, either by exact match
26 /// or by regular expression.
27 //----------------------------------------------------------------------
28
29 class BreakpointResolverName:
30     public BreakpointResolver
31 {
32 public:
33
34     BreakpointResolverName (Breakpoint *bkpt,
35                             const char *name,
36                             uint32_t name_type_mask,
37                             Breakpoint::MatchType type,
38                             bool skip_prologue);
39
40     // This one takes an array of names.  It is always MatchType = Exact.
41     BreakpointResolverName (Breakpoint *bkpt,
42                             const char *names[],
43                             size_t num_names,
44                             uint32_t name_type_mask,
45                             bool skip_prologue);
46
47     // This one takes a C++ array of names.  It is always MatchType = Exact.
48     BreakpointResolverName (Breakpoint *bkpt,
49                             std::vector<std::string> names,
50                             uint32_t name_type_mask,
51                             bool skip_prologue);
52
53     // Creates a function breakpoint by regular expression.  Takes over control of the lifespan of func_regex.
54     BreakpointResolverName (Breakpoint *bkpt,
55                             RegularExpression &func_regex,
56                             bool skip_prologue);
57
58     BreakpointResolverName (Breakpoint *bkpt,
59                             const char *class_name,
60                             const char *method,
61                             Breakpoint::MatchType type,
62                             bool skip_prologue);
63
64     virtual
65     ~BreakpointResolverName ();
66
67     virtual Searcher::CallbackReturn
68     SearchCallback (SearchFilter &filter,
69                     SymbolContext &context,
70                     Address *addr,
71                     bool containing);
72
73     virtual Searcher::Depth
74     GetDepth ();
75
76     virtual void
77     GetDescription (Stream *s);
78
79     virtual void
80     Dump (Stream *s) const;
81
82     /// Methods for support type inquiry through isa, cast, and dyn_cast:
83     static inline bool classof(const BreakpointResolverName *) { return true; }
84     static inline bool classof(const BreakpointResolver *V) {
85         return V->getResolverID() == BreakpointResolver::NameResolver;
86     }
87
88 protected:
89     struct LookupInfo
90     {
91         ConstString name;
92         ConstString lookup_name;
93         uint32_t name_type_mask; // See FunctionNameType
94         bool match_name_after_lookup;
95         
96         LookupInfo () :
97             name(),
98             lookup_name(),
99             name_type_mask (0),
100             match_name_after_lookup (false)
101         {
102         }
103         
104         void
105         Prune (SymbolContextList &sc_list,
106                size_t start_idx) const;
107     };
108     std::vector<LookupInfo> m_lookups;
109     ConstString m_class_name;
110     RegularExpression m_regex;
111     Breakpoint::MatchType m_match_type;
112     bool m_skip_prologue;
113
114     void
115     AddNameLookup (const ConstString &name, uint32_t name_type_mask);
116 private:
117     DISALLOW_COPY_AND_ASSIGN(BreakpointResolverName);
118 };
119
120 } // namespace lldb_private
121
122 #endif  // liblldb_BreakpointResolverName_h_