[transferring] Add mangling support for transferring.

This includes runtime support for instantiating transferring param/result in
function types. This is especially important since that is how we instantiate
function types like: typealias Fn = (transferring X) -> ().

rdar://123118061
This commit is contained in:
Michael Gottesman
2024-02-16 13:54:56 -08:00
parent d35dcc8f9c
commit f4efcec55c
18 changed files with 302 additions and 31 deletions

View File

@@ -639,6 +639,9 @@ swift::_swift_buildDemanglingForMetadata(const Metadata *type,
if (flags.isIsolated()) {
wrapInput(Node::Kind::Isolated);
}
if (flags.isTransferring()) {
wrapInput(Node::Kind::Transferring);
}
inputs.push_back({input, flags.isVariadic()});
}
@@ -762,6 +765,10 @@ swift::_swift_buildDemanglingForMetadata(const Metadata *type,
if (func->isAsync())
funcNode->addChild(Dem.createNode(Node::Kind::AsyncAnnotation), Dem);
if (func->getExtendedFlags().hasTransferringResult())
funcNode->addChild(
Dem.createNode(Node::Kind::TransferringResultFunctionType), Dem);
funcNode->addChild(parameters, Dem);
funcNode->addChild(result, Dem);
return funcNode;