mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Print @escaping For Closures In Generated Memberwise Initializer
Augment the "generate memberwise initializer" refactoring action to automatically print @escaping in parameter position. Closures as stored properties always escape. rdar://62202381
This commit is contained in:
@@ -3126,7 +3126,7 @@ struct MemberwiseParameter {
|
||||
Expr *DefaultExpr;
|
||||
|
||||
MemberwiseParameter(Identifier name, Type type, Expr *initialExpr)
|
||||
: Name(name), MemberType(type), DefaultExpr(initialExpr) {}
|
||||
: Name(name), MemberType(type), DefaultExpr(initialExpr) {}
|
||||
};
|
||||
|
||||
static void generateMemberwiseInit(SourceEditConsumer &EditConsumer,
|
||||
@@ -3139,7 +3139,16 @@ static void generateMemberwiseInit(SourceEditConsumer &EditConsumer,
|
||||
EditConsumer.accept(SM, targetLocation, "\ninternal init(");
|
||||
auto insertMember = [&SM](const MemberwiseParameter &memberData,
|
||||
llvm::raw_ostream &OS, bool wantsSeparator) {
|
||||
OS << memberData.Name << ": " << memberData.MemberType.getString();
|
||||
{
|
||||
OS << memberData.Name << ": ";
|
||||
// Unconditionally print '@escaping' if we print out a function type -
|
||||
// the assignments we generate below will escape this parameter.
|
||||
if (isa<AnyFunctionType>(memberData.MemberType->getCanonicalType())) {
|
||||
OS << "@" << TypeAttributes::getAttrName(TAK_escaping) << " ";
|
||||
}
|
||||
OS << memberData.MemberType.getString();
|
||||
}
|
||||
|
||||
if (auto *expr = memberData.DefaultExpr) {
|
||||
if (isa<NilLiteralExpr>(expr)) {
|
||||
OS << " = nil";
|
||||
|
||||
Reference in New Issue
Block a user