diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Symbol/Declaration.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Symbol/Declaration.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Symbol/Declaration.cpp b/contrib/llvm/tools/lldb/source/Symbol/Declaration.cpp new file mode 100644 index 0000000..3943f02 --- /dev/null +++ b/contrib/llvm/tools/lldb/source/Symbol/Declaration.cpp @@ -0,0 +1,117 @@ +//===-- 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; + +void +Declaration::Dump(Stream *s, bool show_fullpaths) const +{ + if (m_file) + { + *s << ", decl = "; + if (show_fullpaths) + *s << m_file; + else + *s << m_file.GetFilename(); + if (m_line > 0) + s->Printf(":%u", m_line); +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (m_column > 0) + s->Printf(":%u", m_column); +#endif + } + else + { + if (m_line > 0) + { + s->Printf(", line = %u", m_line); +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (m_column > 0) + s->Printf(":%u", m_column); +#endif + } +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + else if (m_column > 0) + s->Printf(", column = %u", m_column); +#endif + } +} + +bool +Declaration::DumpStopContext (Stream *s, bool show_fullpaths) const +{ + if (m_file) + { + if (show_fullpaths || s->GetVerbose()) + *s << m_file; + else + m_file.GetFilename().Dump(s); + + if (m_line > 0) + s->Printf(":%u", m_line); +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (m_column > 0) + s->Printf(":%u", m_column); +#endif + return true; + } + else if (m_line > 0) + { + s->Printf(" line %u", m_line); +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (m_column > 0) + s->Printf(":%u", m_column); +#endif + return true; + } + return false; +} + +size_t +Declaration::MemorySize() const +{ + return sizeof(Declaration); +} + +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; +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (a.m_column < b.m_column) + return -1; + else if (a.m_column > b.m_column) + return 1; +#endif + return 0; +} + +bool +lldb_private::operator == (const Declaration &lhs, const Declaration &rhs) +{ +#ifdef LLDB_ENABLE_DECLARATION_COLUMNS + if (lhs.GetColumn () == rhs.GetColumn ()) + if (lhs.GetLine () == rhs.GetLine ()) + return lhs.GetFile() == rhs.GetFile(); +#else + if (lhs.GetLine () == rhs.GetLine ()) + return lhs.GetFile() == rhs.GetFile(); +#endif + return false; +} + |