@@ -96,13 +96,53 @@ bool lldb_private::formatters::swift::URL_SummaryProvider(
9696 return false ;
9797
9898 std::string summary;
99- if (!underlying_url_sp->GetSummaryAsCString (summary, options))
99+ auto try_format = [&]() {
100+ if (underlying_url_sp->GetSummaryAsCString (summary, options))
101+ return true ;
102+ auto dynval_sp =
103+ underlying_url_sp->GetDynamicValue (lldb::eDynamicCanRunTarget);
104+ if (!dynval_sp)
105+ return false ;
106+ return dynval_sp->GetSummaryAsCString (summary, options);
107+ };
108+ if (!try_format ())
100109 return false ;
101-
102110 stream.PutCString (summary.c_str ());
103111 return true ;
104112}
105113
114+ bool lldb_private::formatters::swift::SwiftURL_SummaryProvider (
115+ ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
116+ static ConstString g__baseURL (" _baseURL" );
117+ static ConstString g__parseInfo (" _parseInfo" );
118+ static ConstString g_urlString (" urlString" );
119+
120+ ValueObjectSP rel_str_sp (
121+ valobj.GetChildAtNamePath ({g__parseInfo, g_urlString}));
122+ if (!rel_str_sp)
123+ return false ;
124+
125+ std::string base;
126+ ValueObjectSP base_url_sp (valobj.GetChildAtNamePath ({g__baseURL}));
127+ if (base_url_sp)
128+ if (ValueObjectSP non_synth_valobj = base_url_sp->GetNonSyntheticValue ()) {
129+ const char *value = non_synth_valobj->GetValueAsCString ();
130+ if (value && llvm::StringRef (value) != " none" )
131+ if (!base_url_sp->GetSummaryAsCString (base, options))
132+ return false ;
133+ }
134+
135+ std::string summary;
136+ if (!rel_str_sp->GetSummaryAsCString (summary, options))
137+ return false ;
138+
139+ // This format matches the implementastion of _SwiftURL.description.
140+ stream << summary;
141+ if (!base.empty ())
142+ stream << " -- " << base;
143+ return true ;
144+ }
145+
106146bool lldb_private::formatters::swift::IndexPath_SummaryProvider (
107147 ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
108148 static ConstString g__indexes (" _indexes" );
0 commit comments