Declaration.h revision fb81642e03567a3413d94cdb632b6005a0ad4273
1//===-- Declaration.h -------------------------------------------*- 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#ifndef liblldb_Declaration_h_ 11#define liblldb_Declaration_h_ 12 13#include "lldb/lldb-private.h" 14#include "lldb/Host/FileSpec.h" 15 16namespace lldb_private { 17 18//---------------------------------------------------------------------- 19/// @class Declaration Declaration.h "lldb/Symbol/Declaration.h" 20/// @brief A class that describes the declaration location of a 21/// lldb object. 22/// 23/// The declarations include the file specification, line number, and 24/// the column info and can help track where functions, blocks, inlined 25/// functions, types, variables, any many other debug core objects were 26/// declared. 27//---------------------------------------------------------------------- 28class Declaration 29{ 30public: 31 //------------------------------------------------------------------ 32 /// Default constructor. 33 //------------------------------------------------------------------ 34 Declaration () : 35 m_file (), 36 m_line (0) 37#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 38 ,m_column (0) 39#endif 40 { 41 } 42 43 44 //------------------------------------------------------------------ 45 /// Construct with file specification, and optional line and column. 46 /// 47 /// @param[in] file_spec 48 /// The file specification that describes where this was 49 /// declared. 50 /// 51 /// @param[in] line 52 /// The line number that describes where this was declared. Set 53 /// to zero if there is no line number information. 54 /// 55 /// @param[in] column 56 /// The column number that describes where this was declared. 57 /// Set to zero if there is no column number information. 58 //------------------------------------------------------------------ 59 Declaration (const FileSpec& file_spec, uint32_t line = 0, uint32_t column = 0) : 60 m_file (file_spec), 61 m_line (line) 62#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 63 ,m_column (column) 64#endif 65 { 66 } 67 68 //------------------------------------------------------------------ 69 /// Construct with a reference to another Declaration object. 70 //------------------------------------------------------------------ 71 Declaration (const Declaration& rhs) : 72 m_file (rhs.m_file), 73 m_line (rhs.m_line) 74#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 75 ,m_column (rhs.m_column) 76#endif 77 { 78 79 } 80 81 //------------------------------------------------------------------ 82 /// Construct with a pointer to another Declaration object. 83 //------------------------------------------------------------------ 84 Declaration(const Declaration* decl_ptr) : 85 m_file(), 86 m_line(0) 87#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 88 ,m_column(0) 89#endif 90 { 91 if (decl_ptr) 92 *this = *decl_ptr; 93 } 94 95 //------------------------------------------------------------------ 96 /// Clear the object's state. 97 /// 98 /// Sets the file specification to be empty, and the line and column 99 /// to zero. 100 //------------------------------------------------------------------ 101 void 102 Clear () 103 { 104 m_file.Clear(); 105 m_line= 0; 106#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 107 m_column = 0; 108#endif 109 } 110 111 //------------------------------------------------------------------ 112 /// Compare two declaration objects. 113 /// 114 /// Compares the two file specifications from \a lhs and \a rhs. If 115 /// the file specifications are equal, then continue to compare the 116 /// line number and column numbers respectively. 117 /// 118 /// @param[in] lhs 119 /// The Left Hand Side const Declaration object reference. 120 /// 121 /// @param[in] rhs 122 /// The Right Hand Side const Declaration object reference. 123 /// 124 /// @return 125 /// @li -1 if lhs < rhs 126 /// @li 0 if lhs == rhs 127 /// @li 1 if lhs > rhs 128 //------------------------------------------------------------------ 129 static int 130 Compare (const Declaration& lhs, const Declaration& rhs); 131 132 //------------------------------------------------------------------ 133 /// Dump a description of this object to a Stream. 134 /// 135 /// Dump a description of the contents of this object to the 136 /// supplied stream \a s. 137 /// 138 /// @param[in] s 139 /// The stream to which to dump the object descripton. 140 //------------------------------------------------------------------ 141 void 142 Dump (Stream *s, bool show_fullpaths) const; 143 144 bool 145 DumpStopContext (Stream *s, bool show_fullpaths) const; 146 //------------------------------------------------------------------ 147 /// Get accessor for the declaration column number. 148 /// 149 /// @return 150 /// Non-zero indicates a valid column number, zero indicates no 151 /// column information is available. 152 //------------------------------------------------------------------ 153 uint32_t 154 GetColumn () const 155 { 156#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 157 return m_column; 158#else 159 return 0; 160#endif 161 } 162 163 //------------------------------------------------------------------ 164 /// Get accessor for file specification. 165 /// 166 /// @return 167 /// A reference to the file specification object. 168 //------------------------------------------------------------------ 169 FileSpec& 170 GetFile () 171 { 172 return m_file; 173 } 174 175 //------------------------------------------------------------------ 176 /// Get const accessor for file specification. 177 /// 178 /// @return 179 /// A const reference to the file specification object. 180 //------------------------------------------------------------------ 181 const FileSpec& 182 GetFile () const 183 { 184 return m_file; 185 } 186 187 //------------------------------------------------------------------ 188 /// Get accessor for the declaration line number. 189 /// 190 /// @return 191 /// Non-zero indicates a valid line number, zero indicates no 192 /// line information is available. 193 //------------------------------------------------------------------ 194 uint32_t 195 GetLine () const 196 { 197 return m_line; 198 } 199 200 201 bool 202 IsValid() const 203 { 204 return m_file && m_line != 0; 205 } 206 207 //------------------------------------------------------------------ 208 /// Get the memory cost of this object. 209 /// 210 /// @return 211 /// The number of bytes that this object occupies in memory. 212 /// The returned value does not include the bytes for any 213 /// shared string values. 214 /// 215 /// @see ConstString::StaticMemorySize () 216 //------------------------------------------------------------------ 217 size_t 218 MemorySize () const; 219 220 //------------------------------------------------------------------ 221 /// Set accessor for the declaration column number. 222 /// 223 /// @param[in] column 224 /// Non-zero indicates a valid column number, zero indicates no 225 /// column information is available. 226 //------------------------------------------------------------------ 227 void 228 SetColumn (uint32_t column) 229 { 230#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 231 m_column = col; 232#endif 233 } 234 235 //------------------------------------------------------------------ 236 /// Set accessor for the declaration file specification. 237 /// 238 /// @param[in] file_spec 239 /// The new declaration file specifciation. 240 //------------------------------------------------------------------ 241 void 242 SetFile (const FileSpec& file_spec) 243 { 244 m_file = file_spec; 245 } 246 247 //------------------------------------------------------------------ 248 /// Set accessor for the declaration line number. 249 /// 250 /// @param[in] line 251 /// Non-zero indicates a valid line number, zero indicates no 252 /// line information is available. 253 //------------------------------------------------------------------ 254 void 255 SetLine (uint32_t line) 256 { 257 m_line = line; 258 } 259protected: 260 //------------------------------------------------------------------ 261 /// Member variables. 262 //------------------------------------------------------------------ 263 FileSpec m_file; ///< The file specification that points to the 264 ///< source file where the declaration occurred. 265 uint32_t m_line; ///< Non-zero values indicates a valid line number, 266 ///< zero indicates no line number information is available. 267#ifdef LLDB_ENABLE_DECLARATION_COLUMNS 268 uint32_t m_column; ///< Non-zero values indicates a valid column number, 269 ///< zero indicates no column information is available. 270#endif 271}; 272 273bool 274operator == (const Declaration &lhs, const Declaration &rhs); 275 276} // namespace lldb_private 277 278#endif // liblldb_Declaration_h_ 279