
Move SBRegistry method registrations from SBReproducer.cpp into files declaring the individual APIs, in order to reduce the memory consumption during build and improve maintainability. The current humongous SBRegistry constructor exhausts all memory on a NetBSD system with 4G RAM + 4G swap, therefore making it impossible to build LLDB. Differential Revision: https://reviews.llvm.org/D59427 llvm-svn: 356481
212 lines
5.6 KiB
C++
212 lines
5.6 KiB
C++
//===-- SBError.cpp ---------------------------------------------*- C++ -*-===//
|
|
//
|
|
// 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/API/SBError.h"
|
|
#include "SBReproducerPrivate.h"
|
|
#include "Utils.h"
|
|
#include "lldb/API/SBStream.h"
|
|
#include "lldb/Utility/Status.h"
|
|
|
|
#include <stdarg.h>
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
SBError::SBError() : m_opaque_up() { LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBError); }
|
|
|
|
SBError::SBError(const SBError &rhs) : m_opaque_up() {
|
|
LLDB_RECORD_CONSTRUCTOR(SBError, (const lldb::SBError &), rhs);
|
|
|
|
m_opaque_up = clone(rhs.m_opaque_up);
|
|
}
|
|
|
|
SBError::~SBError() {}
|
|
|
|
const SBError &SBError::operator=(const SBError &rhs) {
|
|
LLDB_RECORD_METHOD(const lldb::SBError &,
|
|
SBError, operator=,(const lldb::SBError &), rhs);
|
|
|
|
if (this != &rhs)
|
|
m_opaque_up = clone(rhs.m_opaque_up);
|
|
return *this;
|
|
}
|
|
|
|
const char *SBError::GetCString() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBError, GetCString);
|
|
|
|
if (m_opaque_up)
|
|
return m_opaque_up->AsCString();
|
|
return NULL;
|
|
}
|
|
|
|
void SBError::Clear() {
|
|
LLDB_RECORD_METHOD_NO_ARGS(void, SBError, Clear);
|
|
|
|
if (m_opaque_up)
|
|
m_opaque_up->Clear();
|
|
}
|
|
|
|
bool SBError::Fail() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBError, Fail);
|
|
|
|
bool ret_value = false;
|
|
if (m_opaque_up)
|
|
ret_value = m_opaque_up->Fail();
|
|
|
|
|
|
return ret_value;
|
|
}
|
|
|
|
bool SBError::Success() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBError, Success);
|
|
|
|
bool ret_value = true;
|
|
if (m_opaque_up)
|
|
ret_value = m_opaque_up->Success();
|
|
|
|
return ret_value;
|
|
}
|
|
|
|
uint32_t SBError::GetError() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBError, GetError);
|
|
|
|
|
|
uint32_t err = 0;
|
|
if (m_opaque_up)
|
|
err = m_opaque_up->GetError();
|
|
|
|
|
|
return err;
|
|
}
|
|
|
|
ErrorType SBError::GetType() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::ErrorType, SBError, GetType);
|
|
|
|
ErrorType err_type = eErrorTypeInvalid;
|
|
if (m_opaque_up)
|
|
err_type = m_opaque_up->GetType();
|
|
|
|
return err_type;
|
|
}
|
|
|
|
void SBError::SetError(uint32_t err, ErrorType type) {
|
|
LLDB_RECORD_METHOD(void, SBError, SetError, (uint32_t, lldb::ErrorType), err,
|
|
type);
|
|
|
|
CreateIfNeeded();
|
|
m_opaque_up->SetError(err, type);
|
|
}
|
|
|
|
void SBError::SetError(const Status &lldb_error) {
|
|
CreateIfNeeded();
|
|
*m_opaque_up = lldb_error;
|
|
}
|
|
|
|
void SBError::SetErrorToErrno() {
|
|
LLDB_RECORD_METHOD_NO_ARGS(void, SBError, SetErrorToErrno);
|
|
|
|
CreateIfNeeded();
|
|
m_opaque_up->SetErrorToErrno();
|
|
}
|
|
|
|
void SBError::SetErrorToGenericError() {
|
|
LLDB_RECORD_METHOD_NO_ARGS(void, SBError, SetErrorToGenericError);
|
|
|
|
CreateIfNeeded();
|
|
m_opaque_up->SetErrorToErrno();
|
|
}
|
|
|
|
void SBError::SetErrorString(const char *err_str) {
|
|
LLDB_RECORD_METHOD(void, SBError, SetErrorString, (const char *), err_str);
|
|
|
|
CreateIfNeeded();
|
|
m_opaque_up->SetErrorString(err_str);
|
|
}
|
|
|
|
int SBError::SetErrorStringWithFormat(const char *format, ...) {
|
|
CreateIfNeeded();
|
|
va_list args;
|
|
va_start(args, format);
|
|
int num_chars = m_opaque_up->SetErrorStringWithVarArg(format, args);
|
|
va_end(args);
|
|
return num_chars;
|
|
}
|
|
|
|
bool SBError::IsValid() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBError, IsValid);
|
|
return this->operator bool();
|
|
}
|
|
SBError::operator bool() const {
|
|
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBError, operator bool);
|
|
|
|
return m_opaque_up != NULL;
|
|
}
|
|
|
|
void SBError::CreateIfNeeded() {
|
|
if (m_opaque_up == NULL)
|
|
m_opaque_up.reset(new Status());
|
|
}
|
|
|
|
lldb_private::Status *SBError::operator->() { return m_opaque_up.get(); }
|
|
|
|
lldb_private::Status *SBError::get() { return m_opaque_up.get(); }
|
|
|
|
lldb_private::Status &SBError::ref() {
|
|
CreateIfNeeded();
|
|
return *m_opaque_up;
|
|
}
|
|
|
|
const lldb_private::Status &SBError::operator*() const {
|
|
// Be sure to call "IsValid()" before calling this function or it will crash
|
|
return *m_opaque_up;
|
|
}
|
|
|
|
bool SBError::GetDescription(SBStream &description) {
|
|
LLDB_RECORD_METHOD(bool, SBError, GetDescription, (lldb::SBStream &),
|
|
description);
|
|
|
|
if (m_opaque_up) {
|
|
if (m_opaque_up->Success())
|
|
description.Printf("success");
|
|
else {
|
|
const char *err_string = GetCString();
|
|
description.Printf("error: %s", (err_string != NULL ? err_string : ""));
|
|
}
|
|
} else
|
|
description.Printf("error: <NULL>");
|
|
|
|
return true;
|
|
}
|
|
|
|
namespace lldb_private {
|
|
namespace repro {
|
|
|
|
template <>
|
|
void RegisterMethods<SBError>(Registry &R) {
|
|
LLDB_REGISTER_CONSTRUCTOR(SBError, ());
|
|
LLDB_REGISTER_CONSTRUCTOR(SBError, (const lldb::SBError &));
|
|
LLDB_REGISTER_METHOD(const lldb::SBError &,
|
|
SBError, operator=,(const lldb::SBError &));
|
|
LLDB_REGISTER_METHOD_CONST(const char *, SBError, GetCString, ());
|
|
LLDB_REGISTER_METHOD(void, SBError, Clear, ());
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBError, Fail, ());
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBError, Success, ());
|
|
LLDB_REGISTER_METHOD_CONST(uint32_t, SBError, GetError, ());
|
|
LLDB_REGISTER_METHOD_CONST(lldb::ErrorType, SBError, GetType, ());
|
|
LLDB_REGISTER_METHOD(void, SBError, SetError, (uint32_t, lldb::ErrorType));
|
|
LLDB_REGISTER_METHOD(void, SBError, SetErrorToErrno, ());
|
|
LLDB_REGISTER_METHOD(void, SBError, SetErrorToGenericError, ());
|
|
LLDB_REGISTER_METHOD(void, SBError, SetErrorString, (const char *));
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBError, IsValid, ());
|
|
LLDB_REGISTER_METHOD_CONST(bool, SBError, operator bool, ());
|
|
LLDB_REGISTER_METHOD(bool, SBError, GetDescription, (lldb::SBStream &));
|
|
}
|
|
|
|
}
|
|
}
|