Skip to content

Commit 9061d3d

Browse files
committed
CaptureInfo no longer needs to be passed by reference
Now that it's only a word in size, it can be passed by value.
1 parent f5246c4 commit 9061d3d

File tree

10 files changed

+21
-22
lines changed

10 files changed

+21
-22
lines changed

include/swift/AST/AnyFunctionRef.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ class AnyFunctionRef {
5252
}
5353
}
5454

55-
const CaptureInfo &getCaptureInfo() const {
55+
CaptureInfo getCaptureInfo() const {
5656
if (auto *AFD = TheFunction.dyn_cast<AbstractFunctionDecl *>())
5757
return AFD->getCaptureInfo();
5858
return TheFunction.get<AbstractClosureExpr *>()->getCaptureInfo();
5959
}
6060

61-
void setCaptureInfo(const CaptureInfo &captures) const {
61+
void setCaptureInfo(CaptureInfo captures) const {
6262
if (auto *AFD = TheFunction.dyn_cast<AbstractFunctionDecl *>()) {
6363
AFD->setCaptureInfo(captures);
6464
return;

include/swift/AST/Decl.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,8 +2021,8 @@ class PatternBindingEntry {
20212021
/// from the source range.
20222022
SourceRange getSourceRange(bool omitAccessors = false) const;
20232023

2024-
const CaptureInfo &getCaptureInfo() const { return Captures; }
2025-
void setCaptureInfo(const CaptureInfo &captures) { Captures = captures; }
2024+
CaptureInfo getCaptureInfo() const { return Captures; }
2025+
void setCaptureInfo(CaptureInfo captures) { Captures = captures; }
20262026

20272027
private:
20282028
SourceLoc getLastAccessorEndLoc() const;
@@ -2126,11 +2126,11 @@ class PatternBindingDecl final : public Decl,
21262126
return getPatternList()[i].getInitContext();
21272127
}
21282128

2129-
const CaptureInfo &getCaptureInfo(unsigned i) const {
2129+
CaptureInfo getCaptureInfo(unsigned i) const {
21302130
return getPatternList()[i].getCaptureInfo();
21312131
}
21322132

2133-
void setCaptureInfo(unsigned i, const CaptureInfo &captures) {
2133+
void setCaptureInfo(unsigned i, CaptureInfo captures) {
21342134
getMutablePatternList()[i].setCaptureInfo(captures);
21352135
}
21362136

@@ -5237,12 +5237,12 @@ class ParamDecl : public VarDecl {
52375237

52385238
void setDefaultArgumentInitContext(Initializer *initContext);
52395239

5240-
const CaptureInfo &getDefaultArgumentCaptureInfo() const {
5240+
CaptureInfo getDefaultArgumentCaptureInfo() const {
52415241
assert(DefaultValueAndFlags.getPointer());
52425242
return DefaultValueAndFlags.getPointer()->Captures;
52435243
}
52445244

5245-
void setDefaultArgumentCaptureInfo(const CaptureInfo &captures);
5245+
void setDefaultArgumentCaptureInfo(CaptureInfo captures);
52465246

52475247
/// Extracts the text of the default argument attached to the provided
52485248
/// ParamDecl, removing all inactive #if clauses and providing only the
@@ -5814,8 +5814,8 @@ class AbstractFunctionDecl : public GenericContext, public ValueDecl {
58145814
/// Retrieve the source range of the function declaration name + patterns.
58155815
SourceRange getSignatureSourceRange() const;
58165816

5817-
const CaptureInfo &getCaptureInfo() const { return Captures; }
5818-
void setCaptureInfo(const CaptureInfo &captures) { Captures = captures; }
5817+
CaptureInfo getCaptureInfo() const { return Captures; }
5818+
void setCaptureInfo(CaptureInfo captures) { Captures = captures; }
58195819

58205820
/// Retrieve the Objective-C selector that names this method.
58215821
ObjCSelector getObjCSelector(DeclName preferredName = DeclName(),

include/swift/AST/Expr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3449,7 +3449,7 @@ class AbstractClosureExpr : public DeclContext, public Expr {
34493449
Bits.AbstractClosureExpr.Discriminator = Discriminator;
34503450
}
34513451

3452-
const CaptureInfo &getCaptureInfo() const { return Captures; }
3452+
CaptureInfo getCaptureInfo() const { return Captures; }
34533453
void setCaptureInfo(CaptureInfo captures) { Captures = captures; }
34543454

34553455
/// Retrieve the parameters of this closure.

lib/AST/Decl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5850,7 +5850,7 @@ void ParamDecl::setDefaultArgumentInitContext(Initializer *initContext) {
58505850
DefaultValueAndFlags.getPointer()->InitContext = initContext;
58515851
}
58525852

5853-
void ParamDecl::setDefaultArgumentCaptureInfo(const CaptureInfo &captures) {
5853+
void ParamDecl::setDefaultArgumentCaptureInfo(CaptureInfo captures) {
58545854
assert(DefaultValueAndFlags.getPointer());
58555855
DefaultValueAndFlags.getPointer()->Captures = captures;
58565856
}

lib/SIL/TypeLowering.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ static CanAnyFunctionType getDefaultArgGeneratorInterfaceType(
17751775
if (auto *afd = dyn_cast<AbstractFunctionDecl>(vd)) {
17761776
auto *param = getParameterAt(afd, c.defaultArgIndex);
17771777
if (param->getDefaultValue()) {
1778-
auto &captureInfo = param->getDefaultArgumentCaptureInfo();
1778+
auto captureInfo = param->getDefaultArgumentCaptureInfo();
17791779
sig = getEffectiveGenericSignature(afd, captureInfo);
17801780
}
17811781
}
@@ -2132,11 +2132,11 @@ TypeConverter::getLoweredLocalCaptures(SILDeclRef fn) {
21322132
DynamicSelfType *capturesDynamicSelf = nullptr;
21332133
OpaqueValueExpr *capturesOpaqueValue = nullptr;
21342134

2135-
std::function<void (const CaptureInfo &captureInfo)> collectCaptures;
2135+
std::function<void (CaptureInfo captureInfo)> collectCaptures;
21362136
std::function<void (AnyFunctionRef)> collectFunctionCaptures;
21372137
std::function<void (SILDeclRef)> collectConstantCaptures;
21382138

2139-
collectCaptures = [&](const CaptureInfo &captureInfo) {
2139+
collectCaptures = [&](CaptureInfo captureInfo) {
21402140
if (captureInfo.hasGenericParamCaptures())
21412141
capturesGenericParams = true;
21422142
if (captureInfo.hasDynamicSelfCapture())

lib/SILGen/SILGen.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ void SILGenModule::postEmitFunction(SILDeclRef constant,
751751

752752
void SILGenModule::
753753
emitMarkFunctionEscapeForTopLevelCodeGlobals(SILLocation loc,
754-
const CaptureInfo &captureInfo) {
754+
CaptureInfo captureInfo) {
755755
assert(TopLevelSGF && TopLevelSGF->B.hasValidInsertionPoint()
756756
&& "no valid code generator for top-level function?!");
757757

@@ -1100,7 +1100,7 @@ emitStoredPropertyInitialization(PatternBindingDecl *pbd, unsigned i) {
11001100
auto *var = pbdEntry.getAnchoringVarDecl();
11011101
auto *init = pbdEntry.getInit();
11021102
auto *initDC = pbdEntry.getInitContext();
1103-
auto &captureInfo = pbdEntry.getCaptureInfo();
1103+
auto captureInfo = pbdEntry.getCaptureInfo();
11041104
assert(!pbdEntry.isInitializerSubsumed());
11051105

11061106
// If this is the backing storage for a property with an attached wrapper

lib/SILGen/SILGen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
444444
/// Emit a `mark_function_escape` instruction for top-level code when a
445445
/// function or closure at top level refers to script globals.
446446
void emitMarkFunctionEscapeForTopLevelCodeGlobals(SILLocation loc,
447-
const CaptureInfo &captureInfo);
447+
CaptureInfo captureInfo);
448448

449449
/// Map the substitutions for the original declaration to substitutions for
450450
/// the overridden declaration.

lib/SILGen/SILGenFunction.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ class LLVM_LIBRARY_VISIBILITY SILGenFunction
770770

771771
/// emitProlog - Generates prolog code to allocate and clean up mutable
772772
/// storage for closure captures and local arguments.
773-
void emitProlog(const CaptureInfo &captureInfo,
773+
void emitProlog(CaptureInfo captureInfo,
774774
ParameterList *paramList, ParamDecl *selfParam,
775775
DeclContext *DC, Type resultType,
776776
bool throws, SourceLoc throwsLoc);

lib/SILGen/SILGenProlog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ static void emitCaptureArguments(SILGenFunction &SGF,
420420
}
421421
}
422422

423-
void SILGenFunction::emitProlog(const CaptureInfo &captureInfo,
423+
void SILGenFunction::emitProlog(CaptureInfo captureInfo,
424424
ParameterList *paramList,
425425
ParamDecl *selfParam,
426426
DeclContext *DC,

lib/Sema/TypeCheckCaptures.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,7 @@ class FindCapturedVars : public ASTWalker {
319319
return { false, DRE };
320320
}
321321

322-
void propagateCaptures(const CaptureInfo &captureInfo,
323-
SourceLoc loc) {
322+
void propagateCaptures(CaptureInfo captureInfo, SourceLoc loc) {
324323
for (auto capture : captureInfo.getCaptures()) {
325324
// If the decl was captured from us, it isn't captured *by* us.
326325
if (capture.getDecl()->getDeclContext() == CurDC)

0 commit comments

Comments
 (0)