1 //===-- BreakpointResolverFileRegex.cpp --------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Breakpoint/BreakpointResolverFileRegex.h"
14 // Other libraries and framework includes
16 #include "lldb/Breakpoint/BreakpointLocation.h"
17 #include "lldb/Core/SourceManager.h"
18 #include "lldb/Core/Log.h"
19 #include "lldb/Core/StreamString.h"
20 #include "lldb/Symbol/CompileUnit.h"
21 #include "lldb/Target/Target.h"
22 #include "lldb/lldb-private-log.h"
25 using namespace lldb_private;
27 //----------------------------------------------------------------------
28 // BreakpointResolverFileRegex:
29 //----------------------------------------------------------------------
30 BreakpointResolverFileRegex::BreakpointResolverFileRegex
33 RegularExpression ®ex
35 BreakpointResolver (bkpt, BreakpointResolver::FileLineResolver),
40 BreakpointResolverFileRegex::~BreakpointResolverFileRegex ()
44 Searcher::CallbackReturn
45 BreakpointResolverFileRegex::SearchCallback
48 SymbolContext &context,
54 assert (m_breakpoint != NULL);
55 if (!context.target_sp)
56 return eCallbackReturnContinue;
58 CompileUnit *cu = context.comp_unit;
59 FileSpec cu_file_spec = *(static_cast<FileSpec *>(cu));
60 std::vector<uint32_t> line_matches;
61 context.target_sp->GetSourceManager().FindLinesMatchingRegex(cu_file_spec, m_regex, 1, UINT32_MAX, line_matches);
63 uint32_t num_matches = line_matches.size();
64 for (uint32_t i = 0; i < num_matches; i++)
66 SymbolContextList sc_list;
67 const bool search_inlines = false;
68 const bool exact = false;
70 cu->ResolveSymbolContext (cu_file_spec, line_matches[i], search_inlines, exact, eSymbolContextEverything, sc_list);
71 const bool skip_prologue = true;
73 BreakpointResolver::SetSCMatchesByLine (filter, sc_list, skip_prologue, m_regex.GetText());
75 assert (m_breakpoint != NULL);
77 return Searcher::eCallbackReturnContinue;
81 BreakpointResolverFileRegex::GetDepth()
83 return Searcher::eDepthCompUnit;
87 BreakpointResolverFileRegex::GetDescription (Stream *s)
89 s->Printf ("source regex = \"%s\"", m_regex.GetText());
93 BreakpointResolverFileRegex::Dump (Stream *s) const