3636#include " swift/AST/ASTMangler.h"
3737#include " swift/AST/ASTWalker.h"
3838#include " swift/Demangling/Demangle.h"
39+ #include " swift/Demangling/ManglingFlavor.h"
3940#include " swift/RemoteInspection/ReflectionContext.h"
4041#include " swift/RemoteInspection/TypeRefBuilder.h"
4142#include " swift/Strings.h"
@@ -318,8 +319,11 @@ class LLDBTypeInfoProvider : public swift::remote::TypeInfoProvider {
318319 auto *node = dem.demangleSymbol (wrapped);
319320 if (!node) {
320321 // Try `mangledName` as plain ObjC class name. Ex: NSObject, NSView, etc.
322+ // Since this looking up an ObjC type, the default mangling falvor should
323+ // be used.
321324 auto maybeMangled = swift_demangle::mangleClass (
322- dem, swift::MANGLING_MODULE_OBJC, mangledName);
325+ dem, swift::MANGLING_MODULE_OBJC, mangledName,
326+ swift::Mangle::ManglingFlavor::Default);
323327 if (!maybeMangled.isSuccess ()) {
324328 LLDB_LOG (GetLog (LLDBLog::Types),
325329 " [LLDBTypeInfoProvider] invalid mangled name: {0}" ,
@@ -641,7 +645,9 @@ CompilerType GetWeakReferent(TypeSystemSwiftTypeRef &ts, CompilerType type) {
641645 if (!n || n->getKind () != Node::Kind::SugaredOptional || !n->hasChildren ())
642646 return {};
643647 n = n->getFirstChild ();
644- return ts.RemangleAsType (dem, n);
648+ return ts.RemangleAsType (
649+ dem, n,
650+ SwiftLanguageRuntime::GetManglingFlavor (type.GetMangledTypeName ()));
645651}
646652
647653CompilerType GetTypeFromTypeRef (TypeSystemSwiftTypeRef &ts,
@@ -650,7 +656,8 @@ CompilerType GetTypeFromTypeRef(TypeSystemSwiftTypeRef &ts,
650656 return {};
651657 swift::Demangle::Demangler dem;
652658 swift::Demangle::NodePointer node = type_ref->getDemangling (dem);
653- return ts.RemangleAsType (dem, node);
659+ // TODO: the mangling flavor should come from the TypeRef.
660+ return ts.RemangleAsType (dem, node, ts.GetManglingFlavor ());
654661}
655662
656663struct ExistentialSyntheticChild {
@@ -1567,8 +1574,9 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
15671574
15681575 swift::Demangle::Demangler dem;
15691576
1570- auto expand_pack_type = [&](ConstString mangled_pack_type,
1571- bool indirect) -> swift::Demangle::NodePointer {
1577+ auto expand_pack_type = [&](ConstString mangled_pack_type, bool indirect,
1578+ swift::Mangle::ManglingFlavor flavor)
1579+ -> swift::Demangle::NodePointer {
15721580 // Find pack_type in the pack_expansions.
15731581 unsigned i = 0 ;
15741582 SwiftLanguageRuntime::GenericSignature::PackExpansion *pack_expansion =
@@ -1698,7 +1706,7 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
16981706 auto bound_typeref = reflection_ctx->ApplySubstitutions (
16991707 type_ref, substitutions, ts->GetDescriptorFinder ());
17001708 swift::Demangle::NodePointer node = bound_typeref->getDemangling (dem);
1701- CompilerType type = ts->RemangleAsType (dem, node);
1709+ CompilerType type = ts->RemangleAsType (dem, node, flavor );
17021710
17031711 // Add the substituted type to the tuple.
17041712 elements.push_back ({{}, type});
@@ -1724,6 +1732,9 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
17241732 auto node = dem_ctx.demangleSymbolAsNode (
17251733 pack_type.GetMangledTypeName ().GetStringRef ());
17261734
1735+ auto flavor =
1736+ SwiftLanguageRuntime::GetManglingFlavor (pack_type.GetMangledTypeName ());
1737+
17271738 // Expand all the pack types that appear in the incoming type,
17281739 // either at the root level or as arguments of bound generic types.
17291740 bool indirect = false ;
@@ -1739,18 +1750,18 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
17391750 if (node->getNumChildren () != 1 )
17401751 return node;
17411752 node = node->getChild (0 );
1742- CompilerType pack_type = ts->RemangleAsType (dem, node);
1753+ CompilerType pack_type = ts->RemangleAsType (dem, node, flavor );
17431754 ConstString mangled_pack_type = pack_type.GetMangledTypeName ();
17441755 LLDB_LOG (log, " decoded pack_expansion type: {0}" , mangled_pack_type);
1745- auto result = expand_pack_type (mangled_pack_type, indirect);
1756+ auto result = expand_pack_type (mangled_pack_type, indirect, flavor );
17461757 if (!result) {
17471758 LLDB_LOG (log, " failed to expand pack type: {0}" , mangled_pack_type);
17481759 return node;
17491760 }
17501761 return result;
17511762 });
17521763
1753- CompilerType expanded_type = ts->RemangleAsType (dem, transformed);
1764+ CompilerType expanded_type = ts->RemangleAsType (dem, transformed, flavor );
17541765 pack_type_or_name.SetCompilerType (expanded_type);
17551766
17561767 AddressType address_type;
@@ -1824,7 +1835,8 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Class(
18241835 // useful to users.
18251836 if (IsPrivateNSClass (node))
18261837 return false ;
1827- class_type_or_name.SetCompilerType (ts->RemangleAsType (dem, node));
1838+ class_type_or_name.SetCompilerType (ts->RemangleAsType (
1839+ dem, node, swift::Mangle::ManglingFlavor::Default));
18281840 found = true ;
18291841 return true ;
18301842 }
@@ -1854,9 +1866,13 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Class(
18541866 class_type.GetMangledTypeName (), instance_ptr);
18551867 return false ;
18561868 }
1869+
1870+ auto flavor =
1871+ SwiftLanguageRuntime::GetManglingFlavor (class_type.GetMangledTypeName ());
1872+
18571873 swift::Demangle::Demangler dem;
18581874 swift::Demangle::NodePointer node = typeref->getDemangling (dem);
1859- CompilerType dynamic_type = ts->RemangleAsType (dem, node);
1875+ CompilerType dynamic_type = ts->RemangleAsType (dem, node, flavor );
18601876 LLDB_LOG (log, " dynamic type of instance_ptr {0:x} is {1}" , instance_ptr,
18611877 class_type.GetMangledTypeName ());
18621878 class_type_or_name.SetCompilerType (dynamic_type);
@@ -2022,7 +2038,10 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Existential(
20222038 return false ;
20232039 swift::Demangle::Demangler dem;
20242040 swift::Demangle::NodePointer node = typeref->getDemangling (dem);
2025- class_type_or_name.SetCompilerType (ts->RemangleAsType (dem, node));
2041+ auto flavor = SwiftLanguageRuntime::GetManglingFlavor (
2042+ existential_type.GetMangledTypeName ());
2043+
2044+ class_type_or_name.SetCompilerType (ts->RemangleAsType (dem, node, flavor));
20262045 address.SetRawAddress (out_address.getAddressData ());
20272046
20282047#ifndef NDEBUG
@@ -2087,7 +2106,10 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ExistentialMetatype(
20872106 meta->addChild (node, dem);
20882107 wrapped->addChild (meta,dem);
20892108
2090- meta_type = tr_ts->RemangleAsType (dem, wrapped);
2109+ auto flavor =
2110+ SwiftLanguageRuntime::GetManglingFlavor (meta_type.GetMangledTypeName ());
2111+ meta_type =
2112+ tss->GetTypeSystemSwiftTypeRef ()->RemangleAsType (dem, wrapped, flavor);
20912113 class_type_or_name.SetCompilerType (meta_type);
20922114 address.SetRawAddress (ptr);
20932115 return true ;
@@ -2113,7 +2135,9 @@ CompilerType SwiftLanguageRuntimeImpl::GetTypeFromMetadata(TypeSystemSwift &ts,
21132135 using namespace swift ::Demangle;
21142136 Demangler dem;
21152137 NodePointer node = type_ref->getDemangling (dem);
2116- return tr_ts->RemangleAsType (dem, node);
2138+ // TODO: the mangling flavor should come from the TypeRef.
2139+ return ts.GetTypeSystemSwiftTypeRef ()->RemangleAsType (
2140+ dem, node, ts.GetTypeSystemSwiftTypeRef ()->GetManglingFlavor ());
21172141}
21182142
21192143std::optional<lldb::addr_t >
@@ -2236,7 +2260,10 @@ CompilerType SwiftLanguageRuntimeImpl::BindGenericTypeParameters(
22362260 type_ref, substitutions,
22372261 tr_ts->GetDescriptorFinder ());
22382262 NodePointer node = bound_type_ref->getDemangling (dem);
2239- return tr_ts->RemangleAsType (dem, node);
2263+ return ts->GetTypeSystemSwiftTypeRef ()->RemangleAsType (
2264+ dem, node,
2265+ SwiftLanguageRuntime::GetManglingFlavor (
2266+ unbound_type.GetMangledTypeName ()));
22402267}
22412268
22422269CompilerType
@@ -2278,10 +2305,12 @@ SwiftLanguageRuntimeImpl::BindGenericTypeParameters(StackFrame &stack_frame,
22782305 return ;
22792306 substitutions.insert ({{depth, index}, type_ref});
22802307 });
2308+ auto flavor =
2309+ SwiftLanguageRuntime::GetManglingFlavor (mangled_name.GetStringRef ());
22812310
22822311 // Nothing to do if there are no type parameters.
22832312 auto get_canonical = [&]() {
2284- auto mangling = mangleNode (canonical);
2313+ auto mangling = mangleNode (canonical, flavor );
22852314 if (!mangling.isSuccess ())
22862315 return CompilerType ();
22872316 return ts.GetTypeFromMangledTypename (ConstString (mangling.result ()));
@@ -2315,7 +2344,7 @@ SwiftLanguageRuntimeImpl::BindGenericTypeParameters(StackFrame &stack_frame,
23152344 " No scratch context available." );
23162345 return ts.GetTypeFromMangledTypename (mangled_name);
23172346 }
2318- CompilerType bound_type = scratch_ctx->RemangleAsType (dem, node);
2347+ CompilerType bound_type = scratch_ctx->RemangleAsType (dem, node, flavor );
23192348 LLDB_LOG (GetLog (LLDBLog::Expressions | LLDBLog::Types), " Bound {0} -> {1}." ,
23202349 mangled_name, bound_type.GetMangledTypeName ());
23212350 return bound_type;
@@ -2640,6 +2669,13 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ClangType(
26402669
26412670 std::string remangled;
26422671 {
2672+ auto type = in_value.GetCompilerType ();
2673+ std::optional<swift::Mangle::ManglingFlavor> mangling_flavor =
2674+ SwiftLanguageRuntime::GetManglingFlavor (
2675+ type.GetMangledTypeName ().GetStringRef ());
2676+ if (!mangling_flavor)
2677+ return false ;
2678+
26432679 // Create a mangle tree for Swift.Optional<$module.$class>
26442680 using namespace swift ::Demangle;
26452681 NodeFactory factory;
@@ -2668,7 +2704,7 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ClangType(
26682704 factory);
26692705 cty->addChild (c, factory);
26702706
2671- auto mangling = mangleNode (global);
2707+ auto mangling = mangleNode (global, *mangling_flavor );
26722708 if (!mangling.isSuccess ())
26732709 return false ;
26742710 remangled = mangling.result ();
0 commit comments