Skip to content

Commit b6fa326

Browse files
committed
[ASTGen] Generate anonymous closure parameters
E.g. '$0'
1 parent 8d69807 commit b6fa326

File tree

10 files changed

+288
-18
lines changed

10 files changed

+288
-18
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,10 @@ SWIFT_NAME("BridgedASTContext.getIdentifier(self:_:)")
243243
BridgedIdentifier BridgedASTContext_getIdentifier(BridgedASTContext cContext,
244244
BridgedStringRef cStr);
245245

246+
SWIFT_NAME("BridgedASTContext.getDollarIdentifier(self:_:)")
247+
BridgedIdentifier
248+
BridgedASTContext_getDollarIdentifier(BridgedASTContext cContext, size_t idx);
249+
246250
SWIFT_NAME("BridgedASTContext.langOptsHasFeature(self:_:)")
247251
bool BridgedASTContext_langOptsHasFeature(BridgedASTContext cContext,
248252
BridgedFeature feature);
@@ -552,6 +556,13 @@ SWIFT_NAME("getter:BridgedDeclContext.isModuleScopeContext(self:)")
552556
BRIDGED_INLINE bool
553557
BridgedDeclContext_isModuleScopeContext(BridgedDeclContext dc);
554558

559+
SWIFT_NAME("getter:BridgedDeclContext.isClosureExpr(self:)")
560+
BRIDGED_INLINE bool BridgedDeclContext_isClosureExpr(BridgedDeclContext dc);
561+
562+
SWIFT_NAME("BridgedDeclContext.castToClosureExpr(self:)")
563+
BRIDGED_INLINE BridgedClosureExpr
564+
BridgedDeclContext_castToClosureExpr(BridgedDeclContext dc);
565+
555566
SWIFT_NAME("getter:BridgedDeclContext.astContext(self:)")
556567
BRIDGED_INLINE BridgedASTContext
557568
BridgedDeclContext_getASTContext(BridgedDeclContext dc);
@@ -1173,6 +1184,9 @@ BRIDGED_INLINE void
11731184
BridgedParamDecl_setSpecifier(BridgedParamDecl cDecl,
11741185
BridgedParamSpecifier cSpecifier);
11751186

1187+
SWIFT_NAME("BridgedParamDecl.setImplicit(self:)")
1188+
BRIDGED_INLINE void BridgedParamDecl_setImplicit(BridgedParamDecl cDecl);
1189+
11761190
SWIFT_NAME("BridgedConstructorDecl.setParsedBody(self:_:)")
11771191
void BridgedConstructorDecl_setParsedBody(BridgedConstructorDecl decl,
11781192
BridgedBraceStmt body);
@@ -1575,10 +1589,17 @@ BridgedClosureExpr BridgedClosureExpr_createParsed(
15751589
BridgedSourceLoc cArrowLoc, BridgedNullableTypeRepr cExplicitResultType,
15761590
BridgedSourceLoc cInLoc);
15771591

1592+
SWIFT_NAME("BridgedClosureExpr.getParameterList(self:)")
1593+
BridgedParameterList
1594+
BridgedClosureExpr_getParameterList(BridgedClosureExpr cClosure);
1595+
15781596
SWIFT_NAME("BridgedClosureExpr.setParameterList(self:_:)")
15791597
void BridgedClosureExpr_setParameterList(BridgedClosureExpr cClosure,
15801598
BridgedParameterList cParams);
15811599

1600+
SWIFT_NAME("getter:BridgedClosureExpr.hasAnonymousClosureVars(self:)")
1601+
bool BridgedClosureExpr_hasAnonymousClosureVars(BridgedClosureExpr cClosure);
1602+
15821603
SWIFT_NAME("BridgedClosureExpr.setHasAnonymousClosureVars(self:)")
15831604
void BridgedClosureExpr_setHasAnonymousClosureVars(BridgedClosureExpr cClosure);
15841605

@@ -2465,6 +2486,13 @@ BridgedParameterList BridgedParameterList_createParsed(
24652486
BridgedASTContext cContext, BridgedSourceLoc cLeftParenLoc,
24662487
BridgedArrayRef cParameters, BridgedSourceLoc cRightParenLoc);
24672488

2489+
SWIFT_NAME("getter:BridgedParameterList.size(self:)")
2490+
size_t BridgedParameterList_size(BridgedParameterList cParameterList);
2491+
2492+
SWIFT_NAME("BridgedParameterList.get(self:_:)")
2493+
BridgedParamDecl BridgedParameterList_get(BridgedParameterList cParameterList,
2494+
size_t i);
2495+
24682496
struct BridgedASTType {
24692497
swift::TypeBase * _Nullable type;
24702498

include/swift/AST/ASTBridgingImpl.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,16 @@ bool BridgedDeclContext_isModuleScopeContext(BridgedDeclContext dc) {
134134
return dc.unbridged()->isModuleScopeContext();
135135
}
136136

137+
bool BridgedDeclContext_isClosureExpr(BridgedDeclContext dc) {
138+
return llvm::isa_and_present<swift::ClosureExpr>(
139+
llvm::dyn_cast<swift::AbstractClosureExpr>(dc.unbridged()));
140+
}
141+
142+
BridgedClosureExpr BridgedDeclContext_castToClosureExpr(BridgedDeclContext dc) {
143+
return llvm::cast<swift::ClosureExpr>(
144+
llvm::cast<swift::AbstractClosureExpr>(dc.unbridged()));
145+
}
146+
137147
BridgedASTContext BridgedDeclContext_getASTContext(BridgedDeclContext dc) {
138148
return dc.unbridged()->getASTContext();
139149
}
@@ -270,6 +280,10 @@ void BridgedParamDecl_setSpecifier(BridgedParamDecl cDecl,
270280
cDecl.unbridged()->setSpecifier(unbridge(cSpecifier));
271281
}
272282

283+
void BridgedParamDecl_setImplicit(BridgedParamDecl cDecl) {
284+
cDecl.unbridged()->setImplicit();
285+
}
286+
273287
//===----------------------------------------------------------------------===//
274288
// MARK: BridgedSubscriptDecl
275289
//===----------------------------------------------------------------------===//

include/swift/AST/ASTContext.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,10 @@ class ASTContext final {
598598
/// specified string.
599599
Identifier getIdentifier(StringRef Str) const;
600600

601+
/// getDollarIdentifier - Return the uniqued and AST-Context-owned version of
602+
/// anonymous closure parameter (e.g. '$1') name by the index.
603+
Identifier getDollarIdentifier(size_t Idx) const;
604+
601605
/// Convert a given alias map to a map of Identifiers between module aliases and their actual names.
602606
/// For example, if '-module-alias Foo=X -module-alias Bar=Y' input is passed in, the aliases Foo and Bar are
603607
/// the names of the imported or referenced modules in source files in the main module, and X and Y

lib/AST/ASTContext.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,12 @@ Identifier ASTContext::getIdentifier(StringRef Str) const {
971971
return Identifier(I->getKeyData());
972972
}
973973

974+
Identifier ASTContext::getDollarIdentifier(size_t Idx) const {
975+
SmallVector<char, 4> StrBuf;
976+
StringRef varName = ("$" + Twine(Idx)).toStringRef(StrBuf);
977+
return getIdentifier(varName);
978+
}
979+
974980
void ASTContext::lookupInModule(
975981
ModuleDecl *M,
976982
StringRef name,

lib/AST/Bridging/ASTContextBridging.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ BridgedIdentifier BridgedASTContext_getIdentifier(BridgedASTContext cContext,
2626
return cContext.unbridged().getIdentifier(cStr.unbridged());
2727
}
2828

29+
BridgedIdentifier
30+
BridgedASTContext_getDollarIdentifier(BridgedASTContext cContext, size_t idx) {
31+
return cContext.unbridged().getDollarIdentifier(idx);
32+
}
33+
2934
bool BridgedASTContext_langOptsHasFeature(BridgedASTContext cContext,
3035
BridgedFeature feature) {
3136
return cContext.unbridged().LangOpts.hasFeature((Feature)feature);

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,10 @@ bool BridgedNominalTypeDecl_isStructWithUnreferenceableStorage(
728728
return false;
729729
}
730730

731+
//===----------------------------------------------------------------------===//
732+
// MARK: BridgedParameterList
733+
//===----------------------------------------------------------------------===//
734+
731735
BridgedParameterList BridgedParameterList_createParsed(
732736
BridgedASTContext cContext, BridgedSourceLoc cLeftParenLoc,
733737
BridgedArrayRef cParameters, BridgedSourceLoc cRightParenLoc) {
@@ -736,3 +740,12 @@ BridgedParameterList BridgedParameterList_createParsed(
736740
cParameters.unbridged<ParamDecl *>(),
737741
cRightParenLoc.unbridged());
738742
}
743+
744+
size_t BridgedParameterList_size(BridgedParameterList cParameterList) {
745+
return cParameterList.unbridged()->size();
746+
}
747+
748+
BridgedParamDecl BridgedParameterList_get(BridgedParameterList cParameterList,
749+
size_t i) {
750+
return cParameterList.unbridged()->get(i);
751+
}

lib/AST/Bridging/ExprBridging.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,20 @@ BridgedClosureExpr BridgedClosureExpr_createParsed(
146146
declContext);
147147
}
148148

149+
BridgedParameterList
150+
BridgedClosureExpr_getParameterList(BridgedClosureExpr cClosure) {
151+
return cClosure.unbridged()->getParameters();
152+
}
153+
149154
void BridgedClosureExpr_setParameterList(BridgedClosureExpr cClosure,
150155
BridgedParameterList cParams) {
151156
cClosure.unbridged()->setParameterList(cParams.unbridged());
152157
}
153158

159+
bool BridgedClosureExpr_hasAnonymousClosureVars(BridgedClosureExpr cClosure) {
160+
cClosure.unbridged()->hasAnonymousClosureVars();
161+
}
162+
154163
void BridgedClosureExpr_setHasAnonymousClosureVars(
155164
BridgedClosureExpr cClosure) {
156165
cClosure.unbridged()->setHasAnonymousClosureVars();

0 commit comments

Comments
 (0)