llvm-project/lldb/source/Core/Declaration.cpp
Med Ismail Bennani 1435f6b00b [lldb] Move and clean-up the Declaration class (NFC)
This patch moves the Declaration class from the Symbol library to the
Core library. This will allow to use it in a more generic fashion and
aims to lower the dependency cycles when it comes to the linking.

The patch also does some cleaning up by making column information
permanent and removing the LLDB_ENABLE_DECLARATION_COLUMNS directives.

Differential revision: https://reviews.llvm.org/D101556

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2021-05-04 16:34:44 +00:00

84 lines
2.4 KiB
C++

//===-- Declaration.cpp ---------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Core/Declaration.h"
#include "lldb/Utility/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);
if (m_column != LLDB_INVALID_COLUMN_NUMBER)
s->Printf(":%u", m_column);
} else {
if (m_line > 0) {
s->Printf(", line = %u", m_line);
if (m_column != LLDB_INVALID_COLUMN_NUMBER)
s->Printf(":%u", m_column);
} else if (m_column != LLDB_INVALID_COLUMN_NUMBER)
s->Printf(", column = %u", m_column);
}
}
bool Declaration::DumpStopContext(Stream *s, bool show_fullpaths) const {
if (m_file) {
if (show_fullpaths)
*s << m_file;
else
m_file.GetFilename().Dump(s);
if (m_line > 0)
s->Printf(":%u", m_line);
if (m_column != LLDB_INVALID_COLUMN_NUMBER)
s->Printf(":%u", m_column);
return true;
} else if (m_line > 0) {
s->Printf(" line %u", m_line);
if (m_column != LLDB_INVALID_COLUMN_NUMBER)
s->Printf(":%u", m_column);
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;
if (a.m_column < b.m_column)
return -1;
else if (a.m_column > b.m_column)
return 1;
return 0;
}
bool Declaration::FileAndLineEqual(const Declaration &declaration) const {
int file_compare = FileSpec::Compare(this->m_file, declaration.m_file, true);
return file_compare == 0 && this->m_line == declaration.m_line;
}
bool lldb_private::operator==(const Declaration &lhs, const Declaration &rhs) {
if (lhs.GetColumn() != rhs.GetColumn())
return false;
return lhs.GetLine() == rhs.GetLine() && lhs.GetFile() == rhs.GetFile();
}