Skip to content

Commit c377dba

Browse files
Merge pull request #1933 from adrian-prantl/factor-out-dynamic-self
Factor out dynamic self transform
2 parents cb1a6ae + f6c3c45 commit c377dba

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -324,16 +324,6 @@ GetCanonicalNode(lldb_private::Module *M, swift::Demangle::Demangler &dem,
324324
return node_clangtype.first;
325325
return node;
326326
}
327-
case Node::Kind::DynamicSelf: {
328-
// Substitute the static type for dynamic self.
329-
assert(node->getNumChildren() == 1);
330-
if (node->getNumChildren() != 1)
331-
return node;
332-
NodePointer type = node->getChild(0);
333-
if (type->getKind() != Node::Kind::Type || type->getNumChildren() != 1)
334-
return node;
335-
return type->getChild(0);
336-
}
337327
default:
338328
break;
339329
}

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ class TypeSystemSwiftTypeRef : public TypeSystemSwift {
260260
/// Recursively transform the demangle tree starting a \p node by
261261
/// doing a post-order traversal and replacing each node with
262262
/// fn(node).
263+
/// The NodePointer passed to \p fn is guaranteed to be non-null.
263264
static swift::Demangle::NodePointer Transform(
264265
swift::Demangle::Demangler &dem, swift::Demangle::NodePointer node,
265266
std::function<swift::Demangle::NodePointer(swift::Demangle::NodePointer)>

lldb/source/Target/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,9 +1325,20 @@ SwiftLanguageRuntimeImpl::BindGenericTypeParameters(StackFrame &stack_frame,
13251325
}
13261326

13271327
swift::Demangle::Demangler dem;
1328-
swift::Demangle::NodePointer canonical =
1329-
TypeSystemSwiftTypeRef::GetCanonicalDemangleTree(
1330-
ts.GetModule(), dem, mangled_name.GetStringRef());
1328+
swift::Demangle::NodePointer canonical = TypeSystemSwiftTypeRef::Transform(
1329+
dem, dem.demangleSymbol(mangled_name.GetStringRef()),
1330+
[](swift::Demangle::NodePointer node) {
1331+
if (node->getKind() != Node::Kind::DynamicSelf)
1332+
return node;
1333+
// Substitute the static type for dynamic self.
1334+
assert(node->getNumChildren() == 1);
1335+
if (node->getNumChildren() != 1)
1336+
return node;
1337+
NodePointer type = node->getChild(0);
1338+
if (type->getKind() != Node::Kind::Type || type->getNumChildren() != 1)
1339+
return node;
1340+
return type->getChild(0);
1341+
});
13311342

13321343
// Build the list of type substitutions.
13331344
swift::reflection::GenericArgumentMap substitutions;

0 commit comments

Comments
 (0)