1 //===-- FileLineResolver.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/Core/FileLineResolver.h"
13 #include "lldb/Core/Log.h"
14 #include "lldb/Core/StreamString.h"
15 #include "lldb/Symbol/CompileUnit.h"
16 #include "lldb/Symbol/LineTable.h"
19 using namespace lldb_private;
21 //----------------------------------------------------------------------
23 //----------------------------------------------------------------------
24 FileLineResolver::FileLineResolver
26 const FileSpec &file_spec,
31 m_file_spec (file_spec),
32 m_line_number (line_no),
33 m_inlines (check_inlines)
37 FileLineResolver::~FileLineResolver ()
41 Searcher::CallbackReturn
42 FileLineResolver::SearchCallback
45 SymbolContext &context,
50 CompileUnit *cu = context.comp_unit;
52 if (m_inlines || m_file_spec.Compare(*cu, m_file_spec, (bool)m_file_spec.GetDirectory()))
54 uint32_t start_file_idx = 0;
55 uint32_t file_idx = cu->GetSupportFiles().FindFileIndex(start_file_idx, m_file_spec, false);
56 if (file_idx != UINT32_MAX)
58 LineTable *line_table = cu->GetLineTable();
61 if (m_line_number == 0)
63 // Match all lines in a file...
64 const bool append = true;
65 while (file_idx != UINT32_MAX)
67 line_table->FineLineEntriesForFileIndex (file_idx, append, m_sc_list);
68 // Get the next file index in case we have multiple file
69 // entries for the same file
70 file_idx = cu->GetSupportFiles().FindFileIndex(file_idx + 1, m_file_spec, false);
75 // Match a specific line in a file...
80 return Searcher::eCallbackReturnContinue;
84 FileLineResolver::GetDepth()
86 return Searcher::eDepthCompUnit;
90 FileLineResolver::GetDescription (Stream *s)
92 s->Printf ("File and line resolver for file: \"%s\" line: %u",
93 m_file_spec.GetPath().c_str(),
98 FileLineResolver::Clear()
101 m_line_number = UINT32_MAX;
107 FileLineResolver::Reset (const FileSpec &file_spec,
111 m_file_spec = file_spec;
112 m_line_number = line;
114 m_inlines = check_inlines;