Path: blob/main/contrib/llvm-project/lldb/source/API/SBDeclaration.cpp
39587 views
//===-- SBDeclaration.cpp -------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/API/SBDeclaration.h"9#include "Utils.h"10#include "lldb/API/SBStream.h"11#include "lldb/Core/Declaration.h"12#include "lldb/Host/PosixApi.h"13#include "lldb/Utility/Instrumentation.h"14#include "lldb/Utility/Stream.h"1516#include <climits>1718using namespace lldb;19using namespace lldb_private;2021SBDeclaration::SBDeclaration() { LLDB_INSTRUMENT_VA(this); }2223SBDeclaration::SBDeclaration(const SBDeclaration &rhs) {24LLDB_INSTRUMENT_VA(this, rhs);2526m_opaque_up = clone(rhs.m_opaque_up);27}2829SBDeclaration::SBDeclaration(const lldb_private::Declaration *lldb_object_ptr) {30if (lldb_object_ptr)31m_opaque_up = std::make_unique<Declaration>(*lldb_object_ptr);32}3334const SBDeclaration &SBDeclaration::operator=(const SBDeclaration &rhs) {35LLDB_INSTRUMENT_VA(this, rhs);3637if (this != &rhs)38m_opaque_up = clone(rhs.m_opaque_up);39return *this;40}4142void SBDeclaration::SetDeclaration(43const lldb_private::Declaration &lldb_object_ref) {44ref() = lldb_object_ref;45}4647SBDeclaration::~SBDeclaration() = default;4849bool SBDeclaration::IsValid() const {50LLDB_INSTRUMENT_VA(this);51return this->operator bool();52}53SBDeclaration::operator bool() const {54LLDB_INSTRUMENT_VA(this);5556return m_opaque_up.get() && m_opaque_up->IsValid();57}5859SBFileSpec SBDeclaration::GetFileSpec() const {60LLDB_INSTRUMENT_VA(this);6162SBFileSpec sb_file_spec;63if (m_opaque_up.get() && m_opaque_up->GetFile())64sb_file_spec.SetFileSpec(m_opaque_up->GetFile());6566return sb_file_spec;67}6869uint32_t SBDeclaration::GetLine() const {70LLDB_INSTRUMENT_VA(this);7172uint32_t line = 0;73if (m_opaque_up)74line = m_opaque_up->GetLine();757677return line;78}7980uint32_t SBDeclaration::GetColumn() const {81LLDB_INSTRUMENT_VA(this);8283if (m_opaque_up)84return m_opaque_up->GetColumn();85return 0;86}8788void SBDeclaration::SetFileSpec(lldb::SBFileSpec filespec) {89LLDB_INSTRUMENT_VA(this, filespec);9091if (filespec.IsValid())92ref().SetFile(filespec.ref());93else94ref().SetFile(FileSpec());95}96void SBDeclaration::SetLine(uint32_t line) {97LLDB_INSTRUMENT_VA(this, line);9899ref().SetLine(line);100}101102void SBDeclaration::SetColumn(uint32_t column) {103LLDB_INSTRUMENT_VA(this, column);104105ref().SetColumn(column);106}107108bool SBDeclaration::operator==(const SBDeclaration &rhs) const {109LLDB_INSTRUMENT_VA(this, rhs);110111lldb_private::Declaration *lhs_ptr = m_opaque_up.get();112lldb_private::Declaration *rhs_ptr = rhs.m_opaque_up.get();113114if (lhs_ptr && rhs_ptr)115return lldb_private::Declaration::Compare(*lhs_ptr, *rhs_ptr) == 0;116117return lhs_ptr == rhs_ptr;118}119120bool SBDeclaration::operator!=(const SBDeclaration &rhs) const {121LLDB_INSTRUMENT_VA(this, rhs);122123lldb_private::Declaration *lhs_ptr = m_opaque_up.get();124lldb_private::Declaration *rhs_ptr = rhs.m_opaque_up.get();125126if (lhs_ptr && rhs_ptr)127return lldb_private::Declaration::Compare(*lhs_ptr, *rhs_ptr) != 0;128129return lhs_ptr != rhs_ptr;130}131132const lldb_private::Declaration *SBDeclaration::operator->() const {133return m_opaque_up.get();134}135136lldb_private::Declaration &SBDeclaration::ref() {137if (m_opaque_up == nullptr)138m_opaque_up = std::make_unique<lldb_private::Declaration>();139return *m_opaque_up;140}141142const lldb_private::Declaration &SBDeclaration::ref() const {143return *m_opaque_up;144}145146bool SBDeclaration::GetDescription(SBStream &description) {147LLDB_INSTRUMENT_VA(this, description);148149Stream &strm = description.ref();150151if (m_opaque_up) {152char file_path[PATH_MAX * 2];153m_opaque_up->GetFile().GetPath(file_path, sizeof(file_path));154strm.Printf("%s:%u", file_path, GetLine());155if (GetColumn() > 0)156strm.Printf(":%u", GetColumn());157} else158strm.PutCString("No value");159160return true;161}162163lldb_private::Declaration *SBDeclaration::get() { return m_opaque_up.get(); }164165166