@@ -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
10911079llvm::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