1 //===-- FileLineResolver.h --------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_CORE_FILELINERESOLVER_H 10 #define LLDB_CORE_FILELINERESOLVER_H 11 12 #include "lldb/Core/SearchFilter.h" 13 #include "lldb/Symbol/SymbolContext.h" 14 #include "lldb/Utility/FileSpec.h" 15 #include "lldb/lldb-defines.h" 16 17 #include <cstdint> 18 19 namespace lldb_private { 20 class Address; 21 class Stream; 22 23 /// \class FileLineResolver FileLineResolver.h "lldb/Core/FileLineResolver.h" 24 /// This class finds address for source file and line. Optionally, it will 25 /// look for inlined instances of the file and line specification. 26 27 class FileLineResolver : public Searcher { 28 public: FileLineResolver()29 FileLineResolver() 30 : m_file_spec(), 31 // Set this to zero for all lines in a file 32 m_sc_list() {} 33 34 FileLineResolver(const FileSpec &resolver, uint32_t line_no, 35 bool check_inlines); 36 37 ~FileLineResolver() override; 38 39 Searcher::CallbackReturn SearchCallback(SearchFilter &filter, 40 SymbolContext &context, 41 Address *addr) override; 42 43 lldb::SearchDepth GetDepth() override; 44 45 void GetDescription(Stream *s) override; 46 GetFileLineMatches()47 const SymbolContextList &GetFileLineMatches() { return m_sc_list; } 48 49 void Clear(); 50 51 void Reset(const FileSpec &file_spec, uint32_t line, bool check_inlines); 52 53 protected: 54 FileSpec m_file_spec; // This is the file spec we are looking for. 55 uint32_t m_line_number = 56 UINT32_MAX; // This is the line number that we are looking for. 57 SymbolContextList m_sc_list; 58 bool m_inlines = true; // This determines whether the resolver looks for 59 // inlined functions or not. 60 61 private: 62 FileLineResolver(const FileLineResolver &) = delete; 63 const FileLineResolver &operator=(const FileLineResolver &) = delete; 64 }; 65 66 } // namespace lldb_private 67 68 #endif // LLDB_CORE_FILELINERESOLVER_H 69