Skip to content

Commit 04b2174

Browse files
authored
Merge pull request #79232 from rintaro/astgen-closure-anonparam
[ASTGen] Generate anonymous closure parameters
2 parents 5a3327c + cb049d8 commit 04b2174

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
@@ -244,6 +244,10 @@ SWIFT_NAME("BridgedASTContext.getIdentifier(self:_:)")
244244
BridgedIdentifier BridgedASTContext_getIdentifier(BridgedASTContext cContext,
245245
BridgedStringRef cStr);
246246

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

560+
SWIFT_NAME("getter:BridgedDeclContext.isClosureExpr(self:)")
561+
BRIDGED_INLINE bool BridgedDeclContext_isClosureExpr(BridgedDeclContext dc);
562+
563+
SWIFT_NAME("BridgedDeclContext.castToClosureExpr(self:)")
564+
BRIDGED_INLINE BridgedClosureExpr
565+
BridgedDeclContext_castToClosureExpr(BridgedDeclContext dc);
566+
556567
SWIFT_NAME("getter:BridgedDeclContext.astContext(self:)")
557568
BRIDGED_INLINE BridgedASTContext
558569
BridgedDeclContext_getASTContext(BridgedDeclContext dc);
@@ -1194,6 +1205,9 @@ BRIDGED_INLINE void
11941205
BridgedParamDecl_setSpecifier(BridgedParamDecl cDecl,
11951206
BridgedParamSpecifier cSpecifier);
11961207

1208+
SWIFT_NAME("BridgedParamDecl.setImplicit(self:)")
1209+
BRIDGED_INLINE void BridgedParamDecl_setImplicit(BridgedParamDecl cDecl);
1210+
11971211
SWIFT_NAME("BridgedConstructorDecl.setParsedBody(self:_:)")
11981212
void BridgedConstructorDecl_setParsedBody(BridgedConstructorDecl decl,
11991213
BridgedBraceStmt body);
@@ -1596,10 +1610,17 @@ BridgedClosureExpr BridgedClosureExpr_createParsed(
15961610
BridgedSourceLoc cArrowLoc, BridgedNullableTypeRepr cExplicitResultType,
15971611
BridgedSourceLoc cInLoc);
15981612

1613+
SWIFT_NAME("BridgedClosureExpr.getParameterList(self:)")
1614+
BridgedParameterList
1615+
BridgedClosureExpr_getParameterList(BridgedClosureExpr cClosure);
1616+
15991617
SWIFT_NAME("BridgedClosureExpr.setParameterList(self:_:)")
16001618
void BridgedClosureExpr_setParameterList(BridgedClosureExpr cClosure,
16011619
BridgedParameterList cParams);
16021620

1621+
SWIFT_NAME("getter:BridgedClosureExpr.hasAnonymousClosureVars(self:)")
1622+
bool BridgedClosureExpr_hasAnonymousClosureVars(BridgedClosureExpr cClosure);
1623+
16031624
SWIFT_NAME("BridgedClosureExpr.setHasAnonymousClosureVars(self:)")
16041625
void BridgedClosureExpr_setHasAnonymousClosureVars(BridgedClosureExpr cClosure);
16051626

@@ -2509,6 +2530,13 @@ BridgedParameterList BridgedParameterList_createParsed(
25092530
BridgedASTContext cContext, BridgedSourceLoc cLeftParenLoc,
25102531
BridgedArrayRef cParameters, BridgedSourceLoc cRightParenLoc);
25112532

2533+
SWIFT_NAME("getter:BridgedParameterList.size(self:)")
2534+
size_t BridgedParameterList_size(BridgedParameterList cParameterList);
2535+
2536+
SWIFT_NAME("BridgedParameterList.get(self:_:)")
2537+
BridgedParamDecl BridgedParameterList_get(BridgedParameterList cParameterList,
2538+
size_t i);
2539+
25122540
struct BridgedASTType {
25132541
swift::TypeBase * _Nullable type;
25142542

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+
return cClosure.unbridged()->hasAnonymousClosureVars();
161+
}
162+
154163
void BridgedClosureExpr_setHasAnonymousClosureVars(
155164
BridgedClosureExpr cClosure) {
156165
cClosure.unbridged()->setHasAnonymousClosureVars();

0 commit comments

Comments
 (0)