Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 6 additions & 43 deletions maldoca/base/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ cc_library(
srcs = ["error_code_to_status.cc"],
hdrs = ["error_code_to_status.h"],
deps = [
":status",
"@abseil-cpp//absl/status",
"@abseil-cpp//absl/status:status_builder",
],
)

Expand Down Expand Up @@ -64,6 +64,7 @@ cc_library(
":status",
"@abseil-cpp//absl/log:check",
"@abseil-cpp//absl/status",
"@abseil-cpp//absl/status:status_builder",
"@abseil-cpp//absl/status:statusor",
"@abseil-cpp//absl/strings",
"@abseil-cpp//absl/strings:string_view",
Expand All @@ -84,68 +85,30 @@ cc_library(
],
)

cc_library(
name = "source_location",
hdrs = ["source_location.h"],
deps = [
],
)

cc_library(
name = "ret_check",
srcs = ["ret_check.cc"],
hdrs = ["ret_check.h"],
deps = [
":source_location",
":status",
"@abseil-cpp//absl/base:core_headers",
"@abseil-cpp//absl/base:log_severity",
"@abseil-cpp//absl/status",
"@abseil-cpp//absl/status:status_builder",
"@abseil-cpp//absl/status:statusor",
],
)

cc_library(
name = "symbolized_stacktrace",
srcs = ["symbolized_stacktrace.cc"],
hdrs = ["symbolized_stacktrace.h"],
deps = [
"@abseil-cpp//absl/debugging:stacktrace",
"@abseil-cpp//absl/debugging:symbolize",
"@abseil-cpp//absl/strings:str_format",
],
)

cc_test(
name = "symbolized_stacktrace_test",
srcs = ["symbolized_stacktrace_test.cc"],
deps = [
":symbolized_stacktrace",
"@googletest//:gtest_main",
"@abseil-cpp//absl/types:source_location",
],
)

cc_library(
name = "status",
srcs = ["status_builder.cc"],
hdrs = [
"status_builder.h",
"status_macros.h",
],
deps = [
":source_location",
":symbolized_stacktrace",
"@abseil-cpp//absl/base:core_headers",
"@abseil-cpp//absl/base:log_severity",
"@abseil-cpp//absl/container:flat_hash_map",
"@abseil-cpp//absl/log",
"@abseil-cpp//absl/log:log_entry",
"@abseil-cpp//absl/log:log_sink",
"@abseil-cpp//absl/status",
"@abseil-cpp//absl/strings",
"@abseil-cpp//absl/strings:cord",
"@abseil-cpp//absl/synchronization",
"@abseil-cpp//absl/time",
"@abseil-cpp//absl/types:span",
"@abseil-cpp//absl/status:status_builder",
"@abseil-cpp//absl/types:source_location",
],
)
11 changes: 6 additions & 5 deletions maldoca/base/error_code_to_status.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <system_error> // NOLINT(build/c++11): open source

#include "absl/status/status.h"
#include "maldoca/base/status_builder.h"
#include "absl/status/status_builder.h"

namespace maldoca {

Expand Down Expand Up @@ -197,12 +197,13 @@ absl::StatusCode ErrorCodeToStatusCode(const std::error_code& ec) {
}
}

StatusBuilder ErrorCodeToStatus(const std::error_code& ec) {
return StatusBuilder(absl::Status(ErrorCodeToStatusCode(ec), ec.message()));
absl::StatusBuilder ErrorCodeToStatus(const std::error_code& ec) {
return absl::StatusBuilder(
absl::Status(ErrorCodeToStatusCode(ec), ec.message()));
}

StatusBuilder ErrnoToStatus(int errno_value) {
return StatusBuilder(
absl::StatusBuilder ErrnoToStatus(int errno_value) {
return absl::StatusBuilder(
ErrorCodeToStatus(std::error_code(errno_value, std::generic_category())));
}

Expand Down
6 changes: 3 additions & 3 deletions maldoca/base/error_code_to_status.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@
#include <system_error> // NOLINT(build/c++11): open source

#include "absl/status/status.h"
#include "maldoca/base/status_builder.h"
#include "absl/status/status_builder.h"

namespace maldoca {

absl::StatusCode ErrorCodeToStatusCode(const std::error_code& ec);

StatusBuilder ErrorCodeToStatus(const std::error_code& ec);
absl::StatusBuilder ErrorCodeToStatus(const std::error_code& ec);

// Converts an `errno` value into an absl::Status.
StatusBuilder ErrnoToStatus(int errno_value);
absl::StatusBuilder ErrnoToStatus(int errno_value);

} // namespace maldoca

Expand Down
4 changes: 2 additions & 2 deletions maldoca/base/filesystem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@

#include "absl/log/check.h"
#include "absl/status/status.h"
#include "absl/status/status_builder.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "maldoca/base/error_code_to_status.h"
#include "maldoca/base/status_builder.h"
#include "maldoca/base/status_macros.h"
#include "google/protobuf/io/tokenizer.h"
#include "google/protobuf/message.h"
Expand All @@ -40,7 +40,7 @@ namespace {
// the filename.
absl::Status ErrNoToStatusWithFilename(int errno_value,
const std::filesystem::path& file_name) {
StatusBuilder builder = ErrnoToStatus(errno);
absl::StatusBuilder builder = ErrnoToStatus(errno);
builder << file_name.string();
return std::move(builder);
}
Expand Down
22 changes: 11 additions & 11 deletions maldoca/base/ret_check.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,34 +22,34 @@

#include "absl/base/log_severity.h"
#include "absl/status/status.h"
#include "maldoca/base/source_location.h"
#include "maldoca/base/status_builder.h"
#include "absl/status/status_builder.h"
#include "absl/types/source_location.h"

namespace maldoca {
namespace internal_status_macros_ret_check {

StatusBuilder RetCheckFailSlowPath(SourceLocation location) {
return InternalErrorBuilder(location)
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location) {
return absl::StatusBuilder(absl::StatusCode::kInternal, location)
.Log(absl::LogSeverity::kError)
.EmitStackTrace()
<< "MALDOCA_RET_CHECK failure (" << location.file_name() << ":"
<< location.line() << ") ";
}

StatusBuilder RetCheckFailSlowPath(SourceLocation location,
std::string* condition) {
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
std::string* condition) {
std::unique_ptr<std::string> cleanup(condition);
return RetCheckFailSlowPath(location) << *condition << " ";
}

StatusBuilder RetCheckFailSlowPath(SourceLocation location,
const char* condition) {
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
const char* condition) {
return RetCheckFailSlowPath(location) << condition << " ";
}

StatusBuilder RetCheckFailSlowPath(SourceLocation location,
const char* condition,
const absl::Status& status) {
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
const char* condition,
const absl::Status& status) {
return RetCheckFailSlowPath(location)
<< condition << " returned " << status.ToString() << " ";
}
Expand Down
36 changes: 18 additions & 18 deletions maldoca/base/ret_check.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,33 +46,33 @@
#include "absl/base/attributes.h"
#include "absl/base/optimization.h"
#include "absl/status/status.h"
#include "absl/status/status_builder.h"
#include "absl/status/statusor.h"
#include "maldoca/base/source_location.h"
#include "maldoca/base/status_builder.h"
#include "absl/types/source_location.h"
#include "maldoca/base/status_macros.h"

namespace maldoca {
namespace internal_status_macros_ret_check {

// Returns a StatusBuilder that corresponds to a `MALDOCA_RET_CHECK` failure.
StatusBuilder RetCheckFailSlowPath(SourceLocation location);
StatusBuilder RetCheckFailSlowPath(SourceLocation location,
const char* condition);
StatusBuilder RetCheckFailSlowPath(SourceLocation location,
const char* condition,
const absl::Status& s);
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location);
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
const char* condition);
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
const char* condition,
const absl::Status& s);

// Takes ownership of `condition`. This API is a little quirky because it is
// designed to make use of the `::Check_*Impl` methods that implement `CHECK_*`
// and `DCHECK_*`.
StatusBuilder RetCheckFailSlowPath(SourceLocation location,
std::string* condition);
absl::StatusBuilder RetCheckFailSlowPath(absl::SourceLocation location,
std::string* condition);

inline StatusBuilder RetCheckImpl(const absl::Status& status,
const char* condition,
SourceLocation location) {
inline absl::StatusBuilder RetCheckImpl(const absl::Status& status,
const char* condition,
absl::SourceLocation location) {
if (ABSL_PREDICT_TRUE(status.ok())) {
return StatusBuilder(absl::OkStatus(), location);
return absl::StatusBuilder(absl::OkStatus(), location);
}
return RetCheckFailSlowPath(location, condition, status);
}
Expand Down Expand Up @@ -214,11 +214,11 @@ inline unsigned long long GetReferenceableValue( // NOLINT: runtime/int
#define MALDOCA_RET_CHECK(cond) \
while (ABSL_PREDICT_FALSE(!(cond))) \
return ::maldoca::internal_status_macros_ret_check::RetCheckFailSlowPath( \
MALDOCA_LOC, #cond)
absl::SourceLocation::current(), #cond)

#define MALDOCA_RET_CHECK_FAIL() \
return ::maldoca::internal_status_macros_ret_check::RetCheckFailSlowPath( \
MALDOCA_LOC)
absl::SourceLocation::current())

// Takes an expression returning absl::Status and asserts that the status is
// `ok()`. If not, it returns an internal error.
Expand All @@ -235,7 +235,7 @@ inline unsigned long long GetReferenceableValue( // NOLINT: runtime/int
MALDOCA_RETURN_IF_ERROR( \
::maldoca::internal_status_macros_ret_check::RetCheckImpl( \
::maldoca::internal_status_macros_ret_check::AsStatus(status), \
#status, MALDOCA_LOC))
#status, absl::SourceLocation::current()))

#if defined(STATIC_ANALYSIS) || defined(PORTABLE_STATUS)
#define MALDOCA_COMMON_MACROS_INTERNAL_RET_CHECK_OP(name, op, lhs, rhs) \
Expand All @@ -250,7 +250,7 @@ inline unsigned long long GetReferenceableValue( // NOLINT: runtime/int
GetReferenceableValue(rhs), \
#lhs " " #op " " #rhs)) \
return ::maldoca::internal_status_macros_ret_check::RetCheckFailSlowPath( \
MALDOCA_LOC, _result)
absl::SourceLocation::current(), _result)
#endif

#define MALDOCA_RET_CHECK_EQ(lhs, rhs) \
Expand Down
Loading
Loading