Skip to content

Commit d5109c4

Browse files
committed
[WIP][lldb][Swift] Propagate address ValueType in GetDynamicAddressAndType_ExistentialMetaType
1 parent 367909f commit d5109c4

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ class SwiftLanguageRuntime : public LanguageRuntime {
666666
bool GetDynamicTypeAndAddress_ExistentialMetatype(
667667
ValueObject &in_value, CompilerType meta_type,
668668
lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name,
669-
Address &address);
669+
Address &address, Value::ValueType &value_type);
670670

671671
bool GetDynamicTypeAndAddress_Value(ValueObject &in_value,
672672
CompilerType &bound_type,

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2391,7 +2391,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential(
23912391
bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialMetatype(
23922392
ValueObject &in_value, CompilerType meta_type,
23932393
lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name,
2394-
Address &address) {
2394+
Address &address, Value::ValueType &value_type) {
23952395
// Resolve the dynamic type of the metatype.
23962396
AddressType address_type;
23972397
lldb::addr_t ptr = in_value.GetPointerValue(&address_type);
@@ -2437,6 +2437,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialMetatype(
24372437
tss->GetTypeSystemSwiftTypeRef()->RemangleAsType(dem, wrapped, flavor);
24382438
class_type_or_name.SetCompilerType(meta_type);
24392439
address.SetRawAddress(ptr);
2440+
value_type = Value::ValueType::LoadAddress;
24402441
return true;
24412442
}
24422443

@@ -3114,10 +3115,13 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress(
31143115
success = GetDynamicTypeAndAddress_Class(in_value, val_type, use_dynamic,
31153116
class_type_or_name, address,
31163117
static_value_type, local_buffer);
3117-
else if (type_info.AllSet(eTypeIsMetatype | eTypeIsProtocol))
3118+
else if (type_info.AllSet(eTypeIsMetatype | eTypeIsProtocol)) {
3119+
//if (GetDynamicTypeAndAddress_ExistentialMetatype(
3120+
// in_value, val_type, use_dynamic, class_type_or_name, address, value_type))
3121+
// return true; // Otherwise value_type gets overwritten below
31183122
success = GetDynamicTypeAndAddress_ExistentialMetatype(
3119-
in_value, val_type, use_dynamic, class_type_or_name, address);
3120-
else if (type_info.AnySet(eTypeIsProtocol)) {
3123+
in_value, val_type, use_dynamic, class_type_or_name, address, static_value_type);
3124+
} else if (type_info.AnySet(eTypeIsProtocol)) {
31213125
if (type_info.AnySet(eTypeIsObjC))
31223126
success = GetDynamicTypeAndAddress_Class(in_value, val_type, use_dynamic,
31233127
class_type_or_name, address,

0 commit comments

Comments
 (0)