mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -852,6 +852,12 @@ ManglingError Remangler::mangleIsolatedAnyFunctionType(Node *node,
|
||||
return ManglingError::Success;
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleTransferringResultFunctionType(Node *node,
|
||||
unsigned depth) {
|
||||
Buffer << "YT";
|
||||
return ManglingError::Success;
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleFieldOffset(Node *node, unsigned depth) {
|
||||
Buffer << "Wv";
|
||||
return mangleChildNodes(node, depth + 1); // directness, entity
|
||||
@@ -1785,6 +1791,16 @@ Remangler::mangleImplParameterResultDifferentiability(Node *node,
|
||||
return MANGLING_ERROR(ManglingError::InvalidImplDifferentiability, node);
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleImplParameterTransferring(Node *node,
|
||||
unsigned depth) {
|
||||
StringRef text = node->getText();
|
||||
if (text == "transferring") {
|
||||
Buffer << 'T';
|
||||
return ManglingError::Success;
|
||||
}
|
||||
return MANGLING_ERROR(ManglingError::InvalidImplParameterTransferring, node);
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleDynamicSelf(Node *node, unsigned depth) {
|
||||
Buffer << 'D';
|
||||
return mangleSingleChildNode(node, depth + 1); // type
|
||||
@@ -1887,6 +1903,11 @@ ManglingError Remangler::mangleIsolated(Node *node, unsigned depth) {
|
||||
return mangleSingleChildNode(node, depth + 1); // type
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleTransferring(Node *node, unsigned depth) {
|
||||
Buffer << "Yu";
|
||||
return mangleSingleChildNode(node, depth + 1); // type
|
||||
}
|
||||
|
||||
ManglingError Remangler::mangleCompileTimeConst(Node *node, unsigned depth) {
|
||||
Buffer << "Yt";
|
||||
return mangleSingleChildNode(node, depth + 1); // type
|
||||
|
||||
Reference in New Issue
Block a user