LLDB  mainline
SourceLocationSpec.h
Go to the documentation of this file.
1 //===-- SourceLocationSpec.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_UTILITY_SOURCELOCATIONSPEC_H
10 #define LLDB_UTILITY_SOURCELOCATIONSPEC_H
11 
12 #include "lldb/Core/Declaration.h"
13 #include "lldb/lldb-defines.h"
14 #include "llvm/ADT/Optional.h"
15 
16 #include <string>
17 
18 namespace lldb_private {
19 
20 /// \class SourceLocationSpec SourceLocationSpec.h
21 /// "lldb/Core/SourceLocationSpec.h" A source location specifier class.
22 ///
23 /// A source location specifier class that holds a Declaration object containing
24 /// a FileSpec with line and column information. The column line is optional.
25 /// It also holds search flags that can be fetched by resolvers to look inlined
26 /// declarations and/or exact matches.
28 public:
29  /// Constructor.
30  ///
31  /// Takes a \a file_spec with a \a line number and a \a column number. If
32  /// \a column is null or not provided, it is set to llvm::None.
33  ///
34  /// \param[in] file_spec
35  /// The full or partial path to a file.
36  ///
37  /// \param[in] line
38  /// The line number in the source file.
39  ///
40  /// \param[in] column
41  /// The column number in the line of the source file.
42  ///
43  /// \param[in] check_inlines
44  /// Whether to look for a match in inlined declaration.
45  ///
46  /// \param[in] exact_match
47  /// Whether to look for an exact match.
48  ///
49  explicit SourceLocationSpec(FileSpec file_spec, uint32_t line,
50  llvm::Optional<uint16_t> column = llvm::None,
51  bool check_inlines = false,
52  bool exact_match = false);
53 
54  SourceLocationSpec() = delete;
55 
56  /// Convert to boolean operator.
57  ///
58  /// This allows code to check a SourceLocationSpec object to see if it
59  /// contains anything valid using code such as:
60  ///
61  /// \code
62  /// SourceLocationSpec location_spec(...);
63  /// if (location_spec)
64  /// { ...
65  /// \endcode
66  ///
67  /// \return
68  /// A pointer to this object if both the file_spec and the line are valid,
69  /// nullptr otherwise.
70  explicit operator bool() const;
71 
72  /// Logical NOT operator.
73  ///
74  /// This allows code to check a SourceLocationSpec object to see if it is
75  /// invalid using code such as:
76  ///
77  /// \code
78  /// SourceLocationSpec location_spec(...);
79  /// if (!location_spec)
80  /// { ...
81  /// \endcode
82  ///
83  /// \return
84  /// Returns \b true if the object has an invalid file_spec or line number,
85  /// \b false otherwise.
86  bool operator!() const;
87 
88  /// Equal to operator
89  ///
90  /// Tests if this object is equal to \a rhs.
91  ///
92  /// \param[in] rhs
93  /// A const SourceLocationSpec object reference to compare this object
94  /// to.
95  ///
96  /// \return
97  /// \b true if this object is equal to \a rhs, \b false
98  /// otherwise.
99  bool operator==(const SourceLocationSpec &rhs) const;
100 
101  /// Not equal to operator
102  ///
103  /// Tests if this object is not equal to \a rhs.
104  ///
105  /// \param[in] rhs
106  /// A const SourceLocationSpec object reference to compare this object
107  /// to.
108  ///
109  /// \return
110  /// \b true if this object is equal to \a rhs, \b false
111  /// otherwise.
112  bool operator!=(const SourceLocationSpec &rhs) const;
113 
114  /// Less than to operator
115  ///
116  /// Tests if this object is less than \a rhs.
117  ///
118  /// \param[in] rhs
119  /// A const SourceLocationSpec object reference to compare this object
120  /// to.
121  ///
122  /// \return
123  /// \b true if this object is less than \a rhs, \b false
124  /// otherwise.
125  bool operator<(const SourceLocationSpec &rhs) const;
126 
127  /// Compare two SourceLocationSpec objects.
128  ///
129  /// If \a full is true, then the file_spec, the line and column must match.
130  /// If \a full is false, then only the file_spec and line number for \a lhs
131  /// and \a rhs are compared. This allows a SourceLocationSpec object that have
132  /// no column information to match a SourceLocationSpec objects that have
133  /// column information with matching file_spec and line component.
134  ///
135  /// \param[in] lhs
136  /// A const reference to the Left Hand Side object to compare.
137  ///
138  /// \param[in] rhs
139  /// A const reference to the Right Hand Side object to compare.
140  ///
141  /// \param[in] full
142  /// If true, then the file_spec, the line and column must match for a
143  /// compare to return zero (equal to). If false, then only the file_spec
144  /// and line number for \a lhs and \a rhs are compared, else a full
145  /// comparison is done.
146  ///
147  /// \return -1 if \a lhs is less than \a rhs, 0 if \a lhs is equal to \a rhs,
148  /// 1 if \a lhs is greater than \a rhs
149  static int Compare(const SourceLocationSpec &lhs,
150  const SourceLocationSpec &rhs);
151 
152  static bool Equal(const SourceLocationSpec &lhs,
153  const SourceLocationSpec &rhs, bool full);
154 
155  /// Dump this object to a Stream.
156  ///
157  /// Dump the object to the supplied stream \a s, starting with the file name,
158  /// then the line number and if available the column number.
159  ///
160  /// \param[in] s
161  /// The stream to which to dump the object description.
162  void Dump(Stream &s) const;
163 
164  std::string GetString() const;
165 
167 
168  llvm::Optional<uint32_t> GetLine() const;
169 
170  llvm::Optional<uint16_t> GetColumn() const;
171 
172  bool GetCheckInlines() const { return m_check_inlines; }
173 
174  bool GetExactMatch() const { return m_exact_match; }
175 
176 protected:
178  /// Tells if the resolver should look in inlined declaration.
180  /// Tells if the resolver should look for an exact match.
182 };
183 
184 /// Dump a SourceLocationSpec object to a stream
185 Stream &operator<<(Stream &s, const SourceLocationSpec &loc);
186 } // namespace lldb_private
187 
188 #endif // LLDB_UTILITY_SOURCELOCATIONSPEC_H
lldb_private::SourceLocationSpec::GetFileSpec
FileSpec GetFileSpec() const
Definition: SourceLocationSpec.h:166
lldb_private::SourceLocationSpec::m_exact_match
bool m_exact_match
Tells if the resolver should look for an exact match.
Definition: SourceLocationSpec.h:181
lldb_private::SourceLocationSpec
Definition: SourceLocationSpec.h:27
lldb-defines.h
lldb_private::SourceLocationSpec::Equal
static bool Equal(const SourceLocationSpec &lhs, const SourceLocationSpec &rhs, bool full)
Definition: SourceLocationSpec.cpp:50
lldb_private::Declaration::GetFile
FileSpec & GetFile()
Get accessor for file specification.
Definition: Declaration.h:107
lldb_private::Stream
Definition: Stream.h:28
lldb_private::SourceLocationSpec::GetString
std::string GetString() const
Definition: SourceLocationSpec.cpp:63
lldb_private::SourceLocationSpec::SourceLocationSpec
SourceLocationSpec()=delete
lldb_private::SourceLocationSpec::operator==
bool operator==(const SourceLocationSpec &rhs) const
Equal to operator.
Definition: SourceLocationSpec.cpp:26
lldb_private::FileSpec
Definition: FileSpec.h:56
lldb_private::SourceLocationSpec::operator<
bool operator<(const SourceLocationSpec &rhs) const
Less than to operator.
Definition: SourceLocationSpec.cpp:36
lldb_private::SourceLocationSpec::Dump
void Dump(Stream &s) const
Dump this object to a Stream.
Definition: SourceLocationSpec.cpp:57
Declaration.h
string
string(SUBSTRING ${p} 10 -1 pStripped) if($
Definition: Plugins/CMakeLists.txt:40
uint32_t
lldb_private::operator<<
Stream & operator<<(Stream &s, const SourceLocationSpec &loc)
Dump a SourceLocationSpec object to a stream.
Definition: SourceLocationSpec.cpp:40
lldb_private::SourceLocationSpec::m_declaration
Declaration m_declaration
Definition: SourceLocationSpec.h:177
lldb_private
A class that represents a running process on the host machine.
Definition: SBCommandInterpreterRunOptions.h:16
lldb_private::SourceLocationSpec::GetExactMatch
bool GetExactMatch() const
Definition: SourceLocationSpec.h:174
lldb_private::SourceLocationSpec::GetColumn
llvm::Optional< uint16_t > GetColumn() const
Definition: SourceLocationSpec.cpp:76
lldb_private::SourceLocationSpec::Compare
static int Compare(const SourceLocationSpec &lhs, const SourceLocationSpec &rhs)
Compare two SourceLocationSpec objects.
Definition: SourceLocationSpec.cpp:45
lldb_private::SourceLocationSpec::operator!
bool operator!() const
Logical NOT operator.
Definition: SourceLocationSpec.cpp:24
lldb_private::SourceLocationSpec::GetCheckInlines
bool GetCheckInlines() const
Definition: SourceLocationSpec.h:172
lldb_private::SourceLocationSpec::m_check_inlines
bool m_check_inlines
Tells if the resolver should look in inlined declaration.
Definition: SourceLocationSpec.h:179
lldb_private::Declaration
Definition: Declaration.h:24
lldb_private::SourceLocationSpec::operator!=
bool operator!=(const SourceLocationSpec &rhs) const
Not equal to operator.
Definition: SourceLocationSpec.cpp:32
lldb_private::SourceLocationSpec::GetLine
llvm::Optional< uint32_t > GetLine() const
Definition: SourceLocationSpec.cpp:69