blob: e7bce0524c577bbf7b693898c39f5dc9b328b110 [file] [log] [blame]
Jim Ingham969795f2011-09-21 01:17:13 +00001//===-- BreakpointResolverFileRegex.cpp --------------------------*- 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#include "lldb/Breakpoint/BreakpointResolverFileRegex.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project 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"
Greg Clayton1f746072012-08-29 21:13:06 +000020#include "lldb/Symbol/CompileUnit.h"
Jim Ingham969795f2011-09-21 01:17:13 +000021#include "lldb/Target/Target.h"
Jim Ingham969795f2011-09-21 01:17:13 +000022
23using namespace lldb;
24using namespace lldb_private;
25
26//----------------------------------------------------------------------
27// BreakpointResolverFileRegex:
28//----------------------------------------------------------------------
29BreakpointResolverFileRegex::BreakpointResolverFileRegex
30(
31 Breakpoint *bkpt,
Ilia Kd9f1a782015-05-15 18:16:15 +000032 RegularExpression &regex,
33 bool exact_match
Jim Ingham969795f2011-09-21 01:17:13 +000034) :
35 BreakpointResolver (bkpt, BreakpointResolver::FileLineResolver),
Ilia Kd9f1a782015-05-15 18:16:15 +000036 m_regex (regex),
37 m_exact_match (exact_match)
Jim Ingham969795f2011-09-21 01:17:13 +000038{
39}
40
41BreakpointResolverFileRegex::~BreakpointResolverFileRegex ()
42{
43}
44
45Searcher::CallbackReturn
46BreakpointResolverFileRegex::SearchCallback
47(
48 SearchFilter &filter,
49 SymbolContext &context,
50 Address *addr,
51 bool containing
52)
53{
54
55 assert (m_breakpoint != NULL);
56 if (!context.target_sp)
57 return eCallbackReturnContinue;
Jim Ingham969795f2011-09-21 01:17:13 +000058
59 CompileUnit *cu = context.comp_unit;
60 FileSpec cu_file_spec = *(static_cast<FileSpec *>(cu));
Jim Ingham87df91b2011-09-23 00:54:11 +000061 std::vector<uint32_t> line_matches;
Jim Inghamf6423732013-09-27 01:16:58 +000062 context.target_sp->GetSourceManager().FindLinesMatchingRegex(cu_file_spec, m_regex, 1, UINT32_MAX, line_matches);
63
Jim Ingham87df91b2011-09-23 00:54:11 +000064 uint32_t num_matches = line_matches.size();
Andy Gibbsa297a972013-06-19 19:04:53 +000065 for (uint32_t i = 0; i < num_matches; i++)
Jim Ingham969795f2011-09-21 01:17:13 +000066 {
Jim Inghamf6423732013-09-27 01:16:58 +000067 SymbolContextList sc_list;
68 const bool search_inlines = false;
Jim Ingham87df91b2011-09-23 00:54:11 +000069
Ilia Kd9f1a782015-05-15 18:16:15 +000070 cu->ResolveSymbolContext (cu_file_spec, line_matches[i], search_inlines, m_exact_match, eSymbolContextEverything, sc_list);
Jim Inghamf6423732013-09-27 01:16:58 +000071 const bool skip_prologue = true;
72
73 BreakpointResolver::SetSCMatchesByLine (filter, sc_list, skip_prologue, m_regex.GetText());
Jim Ingham969795f2011-09-21 01:17:13 +000074 }
Jim Ingham87df91b2011-09-23 00:54:11 +000075 assert (m_breakpoint != NULL);
76
Jim Ingham969795f2011-09-21 01:17:13 +000077 return Searcher::eCallbackReturnContinue;
78}
79
80Searcher::Depth
81BreakpointResolverFileRegex::GetDepth()
82{
83 return Searcher::eDepthCompUnit;
84}
85
86void
87BreakpointResolverFileRegex::GetDescription (Stream *s)
88{
Ilia Kd9f1a782015-05-15 18:16:15 +000089 s->Printf ("source regex = \"%s\", exact_match = %d", m_regex.GetText(), m_exact_match);
Jim Ingham969795f2011-09-21 01:17:13 +000090}
91
92void
93BreakpointResolverFileRegex::Dump (Stream *s) const
94{
95
96}
97
Jim Ingham33df7cd2014-12-06 01:28:03 +000098lldb::BreakpointResolverSP
99BreakpointResolverFileRegex::CopyForBreakpoint (Breakpoint &breakpoint)
100{
Ilia Kd9f1a782015-05-15 18:16:15 +0000101 lldb::BreakpointResolverSP ret_sp(new BreakpointResolverFileRegex(&breakpoint, m_regex, m_exact_match));
Jim Ingham33df7cd2014-12-06 01:28:03 +0000102 return ret_sp;
103}
104