Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Core/Declaration.h
Line
Count
Source (jump to first uncovered line)
1
//===-- Declaration.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_SYMBOL_DECLARATION_H
10
#define LLDB_SYMBOL_DECLARATION_H
11
12
#include "lldb/Utility/FileSpec.h"
13
#include "lldb/lldb-private.h"
14
15
namespace lldb_private {
16
17
/// \class Declaration Declaration.h "lldb/Core/Declaration.h"
18
/// A class that describes the declaration location of a
19
///        lldb object.
20
///
21
/// The declarations include the file specification, line number, and the
22
/// column info and can help track where functions, blocks, inlined functions,
23
/// types, variables, any many other debug core objects were declared.
24
class Declaration {
25
public:
26
  /// Default constructor.
27
131k
  Declaration() = default;
28
29
  /// Construct with file specification, and optional line and column.
30
  ///
31
  /// \param[in] file_spec
32
  ///     The file specification that describes where this was
33
  ///     declared.
34
  ///
35
  /// \param[in] line
36
  ///     The line number that describes where this was declared. Set
37
  ///     to zero if there is no line number information.
38
  ///
39
  /// \param[in] column
40
  ///     The column number that describes where this was declared.
41
  ///     Set to zero if there is no column number information.
42
  Declaration(const FileSpec &file_spec, uint32_t line = 0,
43
              uint16_t column = LLDB_INVALID_COLUMN_NUMBER)
44
13.6k
      : m_file(file_spec), m_line(line), m_column(column) {}
45
46
  /// Construct with a pointer to another Declaration object.
47
  Declaration(const Declaration *decl_ptr)
48
120k
      : m_line(0), m_column(LLDB_INVALID_COLUMN_NUMBER) {
49
120k
    if (decl_ptr)
50
120k
      *this = *decl_ptr;
51
120k
  }
52
53
  /// Clear the object's state.
54
  ///
55
  /// Sets the file specification to be empty, and the line and column to
56
  /// zero.
57
9.41k
  void Clear() {
58
9.41k
    m_file.Clear();
59
9.41k
    m_line = 0;
60
9.41k
    m_column = 0;
61
9.41k
  }
62
63
  /// Compare two declaration objects.
64
  ///
65
  /// Compares the two file specifications from \a lhs and \a rhs. If the file
66
  /// specifications are equal, then continue to compare the line number and
67
  /// column numbers respectively.
68
  ///
69
  /// \param[in] lhs
70
  ///     The Left Hand Side const Declaration object reference.
71
  ///
72
  /// \param[in] rhs
73
  ///     The Right Hand Side const Declaration object reference.
74
  ///
75
  /// \return
76
  ///     -1 if lhs < rhs
77
  ///     0 if lhs == rhs
78
  ///     1 if lhs > rhs
79
  static int Compare(const Declaration &lhs, const Declaration &rhs);
80
81
  /// Checks if this object has the same file and line as another declaration
82
  /// object.
83
  ///
84
  /// \param[in] declaration
85
  ///     The const Declaration object to compare with.
86
  ///
87
  /// \return
88
  ///     Returns \b true if \b declaration is at the same file and
89
  ///     line, \b false otherwise.
90
  bool FileAndLineEqual(const Declaration &declaration) const;
91
92
  /// Dump a description of this object to a Stream.
93
  ///
94
  /// Dump a description of the contents of this object to the supplied stream
95
  /// \a s.
96
  ///
97
  /// \param[in] s
98
  ///     The stream to which to dump the object description.
99
  void Dump(Stream *s, bool show_fullpaths) const;
100
101
  bool DumpStopContext(Stream *s, bool show_fullpaths) const;
102
103
  /// Get accessor for file specification.
104
  ///
105
  /// \return
106
  ///     A reference to the file specification object.
107
9
  FileSpec &GetFile() { return m_file; }
108
109
  /// Get const accessor for file specification.
110
  ///
111
  /// \return
112
  ///     A const reference to the file specification object.
113
339k
  const FileSpec &GetFile() const { return m_file; }
114
115
  /// Get accessor for the declaration line number.
116
  ///
117
  /// \return
118
  ///     Non-zero indicates a valid line number, zero indicates no
119
  ///     line information is available.
120
130k
  uint32_t GetLine() const { return m_line; }
121
122
  /// Get accessor for the declaration column number.
123
  ///
124
  /// \return
125
  ///     Non-zero indicates a valid column number, zero indicates no
126
  ///     column information is available.
127
120k
  uint16_t GetColumn() const { return m_column; }
128
129
  /// Convert to boolean operator.
130
  ///
131
  /// This allows code to check a Declaration object to see if it
132
  /// contains anything valid using code such as:
133
  ///
134
  /// \code
135
  /// Declaration decl(...);
136
  /// if (decl)
137
  /// { ...
138
  /// \endcode
139
  ///
140
  /// \return
141
  ///     A \b true if both the file_spec and the line are valid,
142
  ///     \b false otherwise.
143
0
  explicit operator bool() const { return IsValid(); }
144
145
1.22k
  bool IsValid() const {
146
1.22k
    return m_file && 
m_line != 01.22k
&&
m_line != 1.22k
LLDB_INVALID_LINE_NUMBER1.22k
;
147
1.22k
  }
148
149
  /// Get the memory cost of this object.
150
  ///
151
  /// \return
152
  ///     The number of bytes that this object occupies in memory.
153
  ///     The returned value does not include the bytes for any
154
  ///     shared string values.
155
  size_t MemorySize() const;
156
157
  /// Set accessor for the declaration file specification.
158
  ///
159
  /// \param[in] file_spec
160
  ///     The new declaration file specification.
161
84.5k
  void SetFile(const FileSpec &file_spec) { m_file = file_spec; }
162
163
  /// Set accessor for the declaration line number.
164
  ///
165
  /// \param[in] line
166
  ///     Non-zero indicates a valid line number, zero indicates no
167
  ///     line information is available.
168
84.5k
  void SetLine(uint32_t line) { m_line = line; }
169
170
  /// Set accessor for the declaration column number.
171
  ///
172
  /// \param[in] column
173
  ///     Non-zero indicates a valid column number, zero indicates no
174
  ///     column information is available.
175
0
  void SetColumn(uint16_t column) { m_column = column; }
176
177
protected:
178
  /// The file specification that points to the source file where the
179
  /// declaration occurred.
180
  FileSpec m_file;
181
  /// Non-zero values indicates a valid line number, zero indicates no line
182
  /// number information is available.
183
  uint32_t m_line = 0;
184
  /// Non-zero values indicates a valid column number, zero indicates no column
185
  /// information is available.
186
  uint16_t m_column = LLDB_INVALID_COLUMN_NUMBER;
187
};
188
189
bool operator==(const Declaration &lhs, const Declaration &rhs);
190
191
} // namespace lldb_private
192
193
#endif // LLDB_SYMBOL_DECLARATION_H