Skip to content

Commit c65e10e

Browse files
committed
[transferring] Improve how the AST dumps/prints transferring.
Specifically: 1. Previously when printing we would not put a space after transferring. 2. When a function type has a transferring result, we wouldn't print it when dumping.
1 parent 1776ce4 commit c65e10e

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

lib/AST/ASTDumper.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4309,6 +4309,7 @@ namespace {
43094309
printFlag(T->isSendable(), "Sendable");
43104310
printFlag(T->isAsync(), "async");
43114311
printFlag(T->isThrowing(), "throws");
4312+
printFlag(T->hasTransferringResult(), "transferring_result");
43124313
}
43134314
if (Type globalActor = T->getGlobalActor()) {
43144315
printFieldQuoted(globalActor.getString(), "global_actor");

lib/AST/ASTPrinter.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3809,7 +3809,20 @@ static bool usesFeatureTransferringArgsAndResults(Decl *decl) {
38093809
if (pd->isTransferring())
38103810
return true;
38113811

3812-
// TODO: Results.
3812+
if (auto *fDecl = dyn_cast<FuncDecl>(decl)) {
3813+
auto fnTy = fDecl->getInterfaceType();
3814+
bool hasTransferring = false;
3815+
if (auto *ft = llvm::dyn_cast_if_present<FunctionType>(fnTy)) {
3816+
if (ft->hasExtInfo())
3817+
hasTransferring = ft->hasTransferringResult();
3818+
} else if (auto *ft =
3819+
llvm::dyn_cast_if_present<GenericFunctionType>(fnTy)) {
3820+
if (ft->hasExtInfo())
3821+
hasTransferring = ft->hasTransferringResult();
3822+
}
3823+
if (hasTransferring)
3824+
return true;
3825+
}
38133826

38143827
return false;
38153828
}
@@ -7398,7 +7411,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
73987411
Printer << " -> ";
73997412

74007413
if (T->hasExtInfo() && T->hasTransferringResult()) {
7401-
Printer.printKeyword("transferring", Options);
7414+
Printer.printKeyword("transferring ", Options);
74027415
}
74037416

74047417
if (T->hasLifetimeDependenceInfo()) {

0 commit comments

Comments
 (0)