Skip to content

Commit f6c3c45

Browse files
committed
Remove the dynamic self replacement from canonicalization
where it doesn't belong and move it directly into BindGenericTypeParameters, where it is the only desirable transformation and full canonicalization is actually counterproductive. A subsequent patch will enable the TypeRef typesystem in the expression evaluator. This is a prerequisite for that to work.
1 parent 347e815 commit f6c3c45

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)