Skip to content

Commit f6bf6dd

Browse files
committed
Refactor PrintObjectViaPointer to return Error instead of bool
1 parent efa060f commit f6bf6dd

File tree

1 file changed

+25
-30
lines changed

1 file changed

+25
-30
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,10 +1019,8 @@ static bool IsSwiftReferenceType(ValueObject &object) {
10191019
return false;
10201020
}
10211021

1022-
static bool PrintObjectViaPointer(Stream &strm, ValueObject &object,
1023-
Process &process) {
1024-
Log *log = GetLog(LLDBLog::DataFormatters | LLDBLog::Expressions);
1025-
1022+
static llvm::Error PrintObjectViaPointer(Stream &strm, ValueObject &object,
1023+
Process &process) {
10261024
Flags flags(object.GetCompilerType().GetTypeInfo());
10271025
addr_t addr = LLDB_INVALID_ADDRESS;
10281026
if (flags.Test(eTypeInstanceIsPointer)) {
@@ -1032,15 +1030,13 @@ static bool PrintObjectViaPointer(Stream &strm, ValueObject &object,
10321030
// Get the address of non-object values (structs, enums).
10331031
auto addr_and_type = object.GetAddressOf(false);
10341032
if (addr_and_type.type != eAddressTypeLoad) {
1035-
LLDB_LOG(log, "address-of value object failed, preventing use of "
1036-
"stringForPrintObject(_:mangledTypeName:)");
1037-
return false;
1033+
return llvm::createStringError("address-of value object failed");
10381034
}
10391035
addr = addr_and_type.address;
10401036
}
10411037

10421038
if (addr == 0 || addr == LLDB_INVALID_ADDRESS)
1043-
return false;
1039+
return llvm::createStringError("invalid address 0x%x", addr);
10441040

10451041
StringRef mangled_type_name = object.GetMangledTypeName();
10461042
// Swift APIs that receive mangled names require the prefix removed.
@@ -1055,47 +1051,46 @@ static bool PrintObjectViaPointer(Stream &strm, ValueObject &object,
10551051
.str();
10561052

10571053
auto result_or_err = RunObjectDescription(object, expr_string, process, true);
1058-
if (!result_or_err) {
1059-
LLDB_LOG_ERROR(log, result_or_err.takeError(),
1060-
"stringForPrintObject(_:mangledTypeName:) failed: {0}");
1061-
return false;
1062-
}
1054+
if (!result_or_err)
1055+
return result_or_err.takeError();
10631056

10641057
// A `(Bool, String)` tuple, where the bool indicates success/failure.
10651058
auto result_sp = *result_or_err;
10661059
auto success_sp = result_sp->GetChildAtIndex(0);
10671060
auto description_sp = result_sp->GetChildAtIndex(1);
10681061

1069-
StreamString dump_stream;
1070-
auto err = DumpString(description_sp, dump_stream);
1062+
StreamString string_result;
1063+
auto err = DumpString(description_sp, string_result);
10711064
if (err) {
1072-
LLDB_LOG_ERROR(log, std::move(err),
1073-
"decoding result of "
1074-
"stringForPrintObject(_:mangledTypeName:) failed: {0}");
1075-
return false;
1065+
return llvm::joinErrors(
1066+
std::move(err),
1067+
llvm::createStringError("decoding of description String failed"));
10761068
}
10771069

10781070
Status status;
1079-
if (!success_sp->IsLogicalTrue(status)) {
1080-
LLDB_LOGF(log,
1081-
"stringForPrintObject(_:mangledTypeName:) produced error: %s",
1082-
dump_stream.GetData());
1083-
return false;
1084-
}
1071+
if (!success_sp->IsLogicalTrue(status))
1072+
// The Bool is false, which means the String is an error message.
1073+
return llvm::createStringError(string_result.GetData());
10851074

1086-
LLDB_LOG(log, "stringForPrintObject(_:mangledTypeName:) succeeded");
1087-
strm.PutCString(dump_stream.GetString());
1088-
return true;
1075+
strm.PutCString(string_result.GetString());
1076+
return llvm::Error::success();
10891077
}
10901078

10911079
llvm::Error SwiftLanguageRuntime::GetObjectDescription(Stream &str,
10921080
ValueObject &object) {
10931081
if (object.IsUninitializedReference())
10941082
return llvm::createStringError("<uninitialized>");
10951083

1096-
if (GetProcess().GetTarget().GetSwiftUseContextFreePrintObject())
1097-
if (PrintObjectViaPointer(str, object, GetProcess()))
1084+
Log *log = GetLog(LLDBLog::DataFormatters | LLDBLog::Expressions);
1085+
if (GetProcess().GetTarget().GetSwiftUseContextFreePrintObject()) {
1086+
if (auto err = PrintObjectViaPointer(str, object, GetProcess())) {
1087+
LLDB_LOG_ERROR(log, std::move(err),
1088+
"stringForPrintObject(_:mangledTypeName) failed: {0}");
1089+
} else {
1090+
LLDB_LOG(log, "stringForPrintObject(_:mangledTypeName:) succeeded");
10981091
return llvm::Error::success();
1092+
}
1093+
}
10991094

11001095
std::string expr_string;
11011096

0 commit comments

Comments
 (0)