//===-- 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; }