Skip to content

Commit 7bf28bf

Browse files
committed
Remove MetadataPromise from the SwiftArray formatter (NFC)
(cherry picked from commit ce4efb1)
1 parent 50617d8 commit 7bf28bf

File tree

5 files changed

+51
-14
lines changed

5 files changed

+51
-14
lines changed

lldb/source/Plugins/Language/Swift/SwiftArray.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h"
1616
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
17+
#include "Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.h"
1718
#include "lldb/Core/ValueObjectConstResult.h"
1819
#include "lldb/DataFormatters/FormattersHelpers.h"
1920
#include "lldb/Target/Process.h"
@@ -281,7 +282,10 @@ bool SwiftSyntheticFrontEndBufferHandler::IsValid() {
281282
}
282283

283284
std::unique_ptr<SwiftArrayBufferHandler>
284-
SwiftArrayBufferHandler::CreateBufferHandler(ValueObject &valobj) {
285+
SwiftArrayBufferHandler::CreateBufferHandler(ValueObject &static_valobj) {
286+
lldb::ValueObjectSP valobj_sp =
287+
static_valobj.GetDynamicValue(lldb::eDynamicCanRunTarget);
288+
ValueObject &valobj = valobj_sp ? *valobj_sp : static_valobj;
285289
llvm::StringRef valobj_typename(
286290
valobj.GetCompilerType().GetTypeName().AsCString(""));
287291

@@ -325,22 +329,24 @@ SwiftArrayBufferHandler::CreateBufferHandler(ValueObject &valobj) {
325329
if (error.Fail() || argmetadata_ptr == LLDB_INVALID_ADDRESS)
326330
return nullptr;
327331

332+
// Get the type of the array elements.
333+
CompilerType argument_type;
334+
auto scratch_ctx_reader = valobj.GetSwiftScratchContext();
335+
if (!scratch_ctx_reader)
336+
return nullptr;
337+
auto *ts = scratch_ctx_reader->get();
338+
if (!ts)
339+
return nullptr;
328340
auto *swift_runtime = SwiftLanguageRuntime::Get(process_sp);
329341
if (!swift_runtime)
330342
return nullptr;
331343

332-
CompilerType argument_type;
333-
334-
SwiftLanguageRuntime::MetadataPromiseSP promise_sp(
335-
swift_runtime->GetMetadataPromise(argmetadata_ptr, valobj));
336-
if (promise_sp)
337-
if (CompilerType type = promise_sp->FulfillTypePromise())
338-
if (auto type_system =
339-
type.GetTypeSystem().dyn_cast_or_null<TypeSystemSwift>())
340-
argument_type =
341-
type_system->GetGenericArgumentType(type.GetOpaqueQualType(), 0);
344+
if (CompilerType type =
345+
swift_runtime->GetTypeFromMetadata(*ts, argmetadata_ptr))
346+
if (auto ts = type.GetTypeSystem().dyn_cast_or_null<TypeSystemSwift>())
347+
argument_type = ts->GetGenericArgumentType(type.GetOpaqueQualType(), 0);
342348

343-
if (!argument_type.IsValid())
349+
if (!argument_type)
344350
return nullptr;
345351

346352
auto handler = std::unique_ptr<SwiftArrayBufferHandler>(

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,11 @@ class SwiftLanguageRuntimeStub {
265265
return addr;
266266
}
267267

268+
CompilerType GetTypeFromMetadata(TypeSystemSwift &tss, Address addr) {
269+
STUB_LOG();
270+
return {};
271+
}
272+
268273
SwiftLanguageRuntime::MetadataPromiseSP
269274
GetMetadataPromise(lldb::addr_t addr, ValueObject &for_object) {
270275
STUB_LOG();
@@ -2373,6 +2378,11 @@ lldb::addr_t SwiftLanguageRuntime::FixupAddress(lldb::addr_t addr,
23732378
FORWARD(FixupAddress, addr, type, error);
23742379
}
23752380

2381+
CompilerType SwiftLanguageRuntime::GetTypeFromMetadata(TypeSystemSwift &tss,
2382+
Address addr) {
2383+
FORWARD(GetTypeFromMetadata, tss, addr);
2384+
}
2385+
23762386
SwiftLanguageRuntime::MetadataPromiseSP
23772387
SwiftLanguageRuntime::GetMetadataPromise(lldb::addr_t addr,
23782388
ValueObject &for_object) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ class SwiftLanguageRuntime : public LanguageRuntime {
255255

256256
MetadataPromiseSP GetMetadataPromise(lldb::addr_t addr,
257257
ValueObject &for_object);
258+
CompilerType GetTypeFromMetadata(TypeSystemSwift &tss, Address address);
258259
/// Build the artificial type metadata variable name for \p swift_type.
259260
static bool GetAbstractTypeName(StreamString &name, swift::Type swift_type);
260261

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ExistentialMetatype(
17751775
return false;
17761776

17771777
const swift::reflection::TypeRef *type_ref =
1778-
reflection_ctx->readTypeFromMetadata(ptr);
1778+
reflection_ctx->ReadTypeFromMetadata(ptr);
17791779

17801780
auto tss = meta_type.GetTypeSystem().dyn_cast_or_null<TypeSystemSwift>();
17811781
if (!tss)
@@ -1799,7 +1799,26 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ExistentialMetatype(
17991799
address.SetRawAddress(ptr);
18001800
return true;
18011801
}
1802-
1802+
1803+
CompilerType SwiftLanguageRuntimeImpl::GetTypeFromMetadata(TypeSystemSwift &ts,
1804+
Address address) {
1805+
lldb::addr_t ptr = address.GetLoadAddress(&GetProcess().GetTarget());
1806+
if (ptr == LLDB_INVALID_ADDRESS)
1807+
return {};
1808+
1809+
ThreadSafeReflectionContext reflection_ctx = GetReflectionContext();
1810+
if (!reflection_ctx)
1811+
return {};
1812+
1813+
const swift::reflection::TypeRef *type_ref =
1814+
reflection_ctx->ReadTypeFromMetadata(ptr);
1815+
1816+
using namespace swift::Demangle;
1817+
Demangler dem;
1818+
NodePointer node = type_ref->getDemangling(dem);
1819+
return ts.GetTypeSystemSwiftTypeRef().RemangleAsType(dem, node);
1820+
}
1821+
18031822
llvm::Optional<lldb::addr_t>
18041823
SwiftLanguageRuntimeImpl::GetTypeMetadataForTypeNameAndFrame(
18051824
StringRef mdvar_name, StackFrame &frame) {

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeImpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ class SwiftLanguageRuntimeImpl {
110110
llvm::Optional<size_t> GetBitAlignment(CompilerType type,
111111
ExecutionContextScope *exe_scope);
112112

113+
CompilerType GetTypeFromMetadata(TypeSystemSwift &tss, Address address);
113114
SwiftLanguageRuntime::MetadataPromiseSP
114115
GetMetadataPromise(lldb::addr_t addr, ValueObject &for_object);
115116

0 commit comments

Comments
 (0)