blob: a31a304b06f9bdc7ad5007d5c831ad580bbd3cc3 [file] [log] [blame]
//===-- 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;
}