1//===-- Declaration.cpp -----------------------------------------*- 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#include "lldb/Symbol/Declaration.h"
11#include "lldb/Core/Stream.h"
12
13using namespace lldb_private;
14
15void
16Declaration::Dump(Stream *s, bool show_fullpaths) const
17{
18    if (m_file)
19    {
20        *s << ", decl = ";
21        if (show_fullpaths)
22            *s << m_file;
23        else
24            *s << m_file.GetFilename();
25        if (m_line > 0)
26            s->Printf(":%u", m_line);
27#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
28        if (m_column > 0)
29            s->Printf(":%u", m_column);
30#endif
31    }
32    else
33    {
34        if (m_line > 0)
35        {
36            s->Printf(", line = %u", m_line);
37#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
38            if (m_column > 0)
39                s->Printf(":%u", m_column);
40#endif
41        }
42#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
43        else if (m_column > 0)
44            s->Printf(", column = %u", m_column);
45#endif
46    }
47}
48
49bool
50Declaration::DumpStopContext (Stream *s, bool show_fullpaths) const
51{
52    if (m_file)
53    {
54        if (show_fullpaths || s->GetVerbose())
55            *s << m_file;
56        else
57            m_file.GetFilename().Dump(s);
58
59        if (m_line > 0)
60            s->Printf(":%u", m_line);
61#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
62        if (m_column > 0)
63            s->Printf(":%u", m_column);
64#endif
65        return true;
66    }
67    else if (m_line > 0)
68    {
69        s->Printf(" line %u", m_line);
70#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
71        if (m_column > 0)
72            s->Printf(":%u", m_column);
73#endif
74        return true;
75    }
76    return false;
77}
78
79size_t
80Declaration::MemorySize() const
81{
82    return sizeof(Declaration);
83}
84
85int
86Declaration::Compare(const Declaration& a, const Declaration& b)
87{
88    int result = FileSpec::Compare(a.m_file, b.m_file, true);
89    if (result)
90        return result;
91    if (a.m_line < b.m_line)
92        return -1;
93    else if (a.m_line > b.m_line)
94        return 1;
95#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
96    if (a.m_column < b.m_column)
97        return -1;
98    else if (a.m_column > b.m_column)
99        return 1;
100#endif
101    return 0;
102}
103
104bool
105lldb_private::operator == (const Declaration &lhs, const Declaration &rhs)
106{
107#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
108    if (lhs.GetColumn () == rhs.GetColumn ())
109        if (lhs.GetLine () == rhs.GetLine ())
110            return lhs.GetFile() == rhs.GetFile();
111#else
112    if (lhs.GetLine () == rhs.GetLine ())
113        return lhs.GetFile() == rhs.GetFile();
114#endif
115    return false;
116}
117
118