1ac7ddfbfSEd Maste //===-- Declaration.cpp -----------------------------------------*- C++ -*-===// 2ac7ddfbfSEd Maste // 3ac7ddfbfSEd Maste // The LLVM Compiler Infrastructure 4ac7ddfbfSEd Maste // 5ac7ddfbfSEd Maste // This file is distributed under the University of Illinois Open Source 6ac7ddfbfSEd Maste // License. See LICENSE.TXT for details. 7ac7ddfbfSEd Maste // 8ac7ddfbfSEd Maste //===----------------------------------------------------------------------===// 9ac7ddfbfSEd Maste 10ac7ddfbfSEd Maste #include "lldb/Symbol/Declaration.h" 11f678e45dSDimitry Andric #include "lldb/Utility/Stream.h" 12ac7ddfbfSEd Maste 13ac7ddfbfSEd Maste using namespace lldb_private; 14ac7ddfbfSEd Maste 15435933ddSDimitry Andric void Declaration::Dump(Stream *s, bool show_fullpaths) const { 16435933ddSDimitry Andric if (m_file) { 17ac7ddfbfSEd Maste *s << ", decl = "; 18ac7ddfbfSEd Maste if (show_fullpaths) 19ac7ddfbfSEd Maste *s << m_file; 20ac7ddfbfSEd Maste else 21ac7ddfbfSEd Maste *s << m_file.GetFilename(); 22ac7ddfbfSEd Maste if (m_line > 0) 23ac7ddfbfSEd Maste s->Printf(":%u", m_line); 24ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 25ac7ddfbfSEd Maste if (m_column > 0) 26ac7ddfbfSEd Maste s->Printf(":%u", m_column); 27ac7ddfbfSEd Maste #endif 28435933ddSDimitry Andric } else { 29435933ddSDimitry Andric if (m_line > 0) { 30ac7ddfbfSEd Maste s->Printf(", line = %u", m_line); 31ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 32ac7ddfbfSEd Maste if (m_column > 0) 33ac7ddfbfSEd Maste s->Printf(":%u", m_column); 34ac7ddfbfSEd Maste #endif 35ac7ddfbfSEd Maste } 36ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 37ac7ddfbfSEd Maste else if (m_column > 0) 38ac7ddfbfSEd Maste s->Printf(", column = %u", m_column); 39ac7ddfbfSEd Maste #endif 40ac7ddfbfSEd Maste } 41ac7ddfbfSEd Maste } 42ac7ddfbfSEd Maste 43435933ddSDimitry Andric bool Declaration::DumpStopContext(Stream *s, bool show_fullpaths) const { 44435933ddSDimitry Andric if (m_file) { 45f678e45dSDimitry Andric if (show_fullpaths) 46ac7ddfbfSEd Maste *s << m_file; 47ac7ddfbfSEd Maste else 48ac7ddfbfSEd Maste m_file.GetFilename().Dump(s); 49ac7ddfbfSEd Maste 50ac7ddfbfSEd Maste if (m_line > 0) 51ac7ddfbfSEd Maste s->Printf(":%u", m_line); 52ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 53ac7ddfbfSEd Maste if (m_column > 0) 54ac7ddfbfSEd Maste s->Printf(":%u", m_column); 55ac7ddfbfSEd Maste #endif 56ac7ddfbfSEd Maste return true; 57435933ddSDimitry Andric } else if (m_line > 0) { 58ac7ddfbfSEd Maste s->Printf(" line %u", m_line); 59ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 60ac7ddfbfSEd Maste if (m_column > 0) 61ac7ddfbfSEd Maste s->Printf(":%u", m_column); 62ac7ddfbfSEd Maste #endif 63ac7ddfbfSEd Maste return true; 64ac7ddfbfSEd Maste } 65ac7ddfbfSEd Maste return false; 66ac7ddfbfSEd Maste } 67ac7ddfbfSEd Maste 68435933ddSDimitry Andric size_t Declaration::MemorySize() const { return sizeof(Declaration); } 69ac7ddfbfSEd Maste 70435933ddSDimitry Andric int Declaration::Compare(const Declaration &a, const Declaration &b) { 71ac7ddfbfSEd Maste int result = FileSpec::Compare(a.m_file, b.m_file, true); 72ac7ddfbfSEd Maste if (result) 73ac7ddfbfSEd Maste return result; 74ac7ddfbfSEd Maste if (a.m_line < b.m_line) 75ac7ddfbfSEd Maste return -1; 76ac7ddfbfSEd Maste else if (a.m_line > b.m_line) 77ac7ddfbfSEd Maste return 1; 78ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 79ac7ddfbfSEd Maste if (a.m_column < b.m_column) 80ac7ddfbfSEd Maste return -1; 81ac7ddfbfSEd Maste else if (a.m_column > b.m_column) 82ac7ddfbfSEd Maste return 1; 83ac7ddfbfSEd Maste #endif 84ac7ddfbfSEd Maste return 0; 85ac7ddfbfSEd Maste } 86ac7ddfbfSEd Maste 87435933ddSDimitry Andric bool lldb_private::operator==(const Declaration &lhs, const Declaration &rhs) { 88ac7ddfbfSEd Maste #ifdef LLDB_ENABLE_DECLARATION_COLUMNS 89ac7ddfbfSEd Maste if (lhs.GetColumn() == rhs.GetColumn()) 90ac7ddfbfSEd Maste if (lhs.GetLine() == rhs.GetLine()) 91ac7ddfbfSEd Maste return lhs.GetFile() == rhs.GetFile(); 92ac7ddfbfSEd Maste #else 93ac7ddfbfSEd Maste if (lhs.GetLine() == rhs.GetLine()) 947aa51b79SEd Maste return FileSpec::Equal(lhs.GetFile(), rhs.GetFile(), true, true); 95ac7ddfbfSEd Maste #endif 96ac7ddfbfSEd Maste return false; 97ac7ddfbfSEd Maste } 98