diff options
Diffstat (limited to 'lldb/source/Symbol/Declaration.cpp')
-rw-r--r-- | lldb/source/Symbol/Declaration.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/lldb/source/Symbol/Declaration.cpp b/lldb/source/Symbol/Declaration.cpp new file mode 100644 index 00000000000..a31a304b06f --- /dev/null +++ b/lldb/source/Symbol/Declaration.cpp @@ -0,0 +1,172 @@ +//===-- Declaration.cpp -----------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Symbol/Declaration.h" +#include "lldb/Core/Stream.h" + +using namespace lldb_private; + +Declaration::Declaration() : + m_file(), + m_line(0), + m_column(0) +{ +} + +Declaration::Declaration(const FileSpec& f, uint32_t l, uint32_t c) : + m_file(f), + m_line(l), + m_column(c) +{ +} + +Declaration::Declaration(const Declaration& rhs) : + m_file(rhs.m_file), + m_line(rhs.m_line), + m_column(rhs.m_column) +{ +} + +Declaration::Declaration(const Declaration* decl_ptr) : + m_file(), + m_line(0), + m_column(0) +{ + if (decl_ptr != NULL) + *this = *decl_ptr; +} + +bool +Declaration::IsValid() const +{ + return m_file && m_line != 0; +} + +void +Declaration::Clear() +{ + m_file.Clear(); + m_line= 0; + m_column = 0; +} + +void +Declaration::Dump(Stream *s) const +{ + if (m_file) + { + *s << ", decl = '" << m_file; + if (m_line > 0) + s->Printf(":%u", m_line); + if (m_column > 0) + s->Printf(":%u", m_column); + s->PutChar('\''); + } + else + { + if (m_line > 0) + { + s->Printf(", line = %u", m_line); + if (m_column > 0) + s->Printf(":%u", m_column); + } + else if (m_column > 0) + s->Printf(", column = %u", m_column); + } +} + +void +Declaration::DumpStopContext (Stream *s) const +{ + if (m_file) + { + if (s->GetVerbose()) + *s << m_file; + else + m_file.GetFilename().Dump(s); + + if (m_line > 0) + s->Printf(":%u", m_line); + if (m_column > 0) + s->Printf(":%u", m_column); + } + else + { + s->Printf(" line %u", m_line); + if (m_column > 0) + s->Printf(":%u", m_column); + } +} + +uint32_t +Declaration::GetColumn() const +{ + return m_column; +} + +FileSpec& +Declaration::GetFile() +{ + return m_file; +} + +const FileSpec& +Declaration::GetFile() const +{ + return m_file; +} + +uint32_t +Declaration::GetLine() const +{ + return m_line; +} + +size_t +Declaration::MemorySize() const +{ + return sizeof(Declaration); +} + +void +Declaration::SetColumn(uint32_t col) +{ + m_column = col; +} + +void +Declaration::SetFile(const FileSpec& file) +{ + m_file = file; +} + +void +Declaration::SetLine(uint32_t line) +{ + m_line = line; +} + + + +int +Declaration::Compare(const Declaration& a, const Declaration& b) +{ + int result = FileSpec::Compare(a.m_file, b.m_file, true); + if (result) + return result; + if (a.m_line < b.m_line) + return -1; + else if (a.m_line > b.m_line) + return 1; + if (a.m_column < b.m_column) + return -1; + else if (a.m_column > b.m_column) + return 1; + return 0; +} |