Skip to content

Commit 6d7b3d6

Browse files
committed
[ASTGen] Generate several attributes
* NonisolatedAttr * SpecializeAttr * UnavailableFromAsyncAttr * DocumentationAttr * StorageRestrictionsAttr
1 parent 5945a89 commit 6d7b3d6

File tree

17 files changed

+862
-127
lines changed

17 files changed

+862
-127
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ inline const void *_Nullable BridgedIdentifier_raw(BridgedIdentifier ident) {
8989
return ident.Raw;
9090
}
9191

92+
SWIFT_NAME("getter:BridgedIdentifier.isOperator(self:)")
93+
BRIDGED_INLINE bool BridgedIdentifier_isOperator(const BridgedIdentifier);
94+
9295
struct BridgedLocatedIdentifier {
9396
SWIFT_NAME("name")
9497
BridgedIdentifier Name;
@@ -576,6 +579,7 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedAccessLevel {
576579
BridgedAccessLevelPackage,
577580
BridgedAccessLevelPublic,
578581
BridgedAccessLevelOpen,
582+
BridgedAccessLevelNone,
579583
};
580584

581585
SWIFT_NAME("BridgedAccessControlAttr.createParsed(_:range:accessLevel:)")
@@ -612,6 +616,13 @@ BridgedCustomAttr BridgedCustomAttr_createParsed(
612616
BridgedNullablePatternBindingInitializer cInitContext,
613617
BridgedNullableArgumentList cArgumentList);
614618

619+
SWIFT_NAME("BridgedDocumentationAttr.createParsed(_:atLoc:range:metadata:"
620+
"accessLevel:)")
621+
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
622+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
623+
BridgedSourceRange cRange, BridgedStringRef cMetadata,
624+
BridgedAccessLevel cAccessLevel);
625+
615626
SWIFT_NAME(
616627
"BridgedDynamicReplacementAttr.createParsed(_:atLoc:attrNameLoc:lParenLoc:"
617628
"replacedFunction:rParenLoc:)")
@@ -739,6 +750,13 @@ BridgedMacroRoleAttr BridgedMacroRoleAttr_createParsed(
739750
BridgedSourceLoc cLParenLoc, BridgedMacroRole cRole, BridgedArrayRef cNames,
740751
BridgedArrayRef cConformances, BridgedSourceLoc cRParenLoc);
741752

753+
SWIFT_NAME("BridgedStorageRestrictionsAttr.createParsed(_:atLoc:range:"
754+
"initializes:accesses:)")
755+
BridgedStorageRestrictionsAttr BridgedStorageRestrictionsAttr_createParsed(
756+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
757+
BridgedSourceRange cRange, BridgedArrayRef cInitializes,
758+
BridgedArrayRef cAccesses);
759+
742760
SWIFT_NAME(
743761
"BridgedSwiftNativeObjCRuntimeBaseAttr.createParsed(_:atLoc:range:name:)")
744762
BridgedSwiftNativeObjCRuntimeBaseAttr
@@ -757,6 +775,12 @@ BridgedNonSendableAttr BridgedNonSendableAttr_createParsed(
757775
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
758776
BridgedSourceRange cRange, BridgedNonSendableKind cKind);
759777

778+
SWIFT_NAME("BridgedNonisolatedAttr.createParsed(_:atLoc:range:isUnsafe:)")
779+
BridgedNonisolatedAttr
780+
BridgedNonisolatedAttr_createParsed(BridgedASTContext cContext,
781+
BridgedSourceLoc cAtLoc,
782+
BridgedSourceRange cRange, bool isUnsafe);
783+
760784
SWIFT_NAME("BridgedObjCAttr.createParsedUnnamed(_:atLoc:attrNameLoc:)")
761785
BridgedObjCAttr
762786
BridgedObjCAttr_createParsedUnnamed(BridgedASTContext cContext,
@@ -848,6 +872,20 @@ BridgedSetterAccessAttr_createParsed(BridgedASTContext cContext,
848872
BridgedSourceRange cRange,
849873
BridgedAccessLevel cAccessLevel);
850874

875+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedSpecializationKind : uint8_t {
876+
BridgedSpecializationKindFull,
877+
BridgedSpecializationKindPartial,
878+
};
879+
880+
SWIFT_NAME("BridgedSpecializeAttr.createParsed(_:atLoc:range:whereClause:"
881+
"exported:kind:taretFunction:spiGroups:availableAttrs:)")
882+
BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
883+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
884+
BridgedSourceRange cRange, BridgedNullableTrailingWhereClause cWhereClause,
885+
bool exported, BridgedSpecializationKind cKind,
886+
BridgedDeclNameRef cTargetFunction, BridgedArrayRef cSPIGroups,
887+
BridgedArrayRef cAvailableAttrs);
888+
851889
SWIFT_NAME(
852890
"BridgedSPIAccessControlAttr.createParsed(_:atLoc:range:spiGroupName:)")
853891
BridgedSPIAccessControlAttr BridgedSPIAccessControlAttr_createParsed(
@@ -859,6 +897,12 @@ BridgedSILGenNameAttr BridgedSILGenNameAttr_createParsed(
859897
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
860898
BridgedSourceRange cRange, BridgedStringRef cName, bool isRaw);
861899

900+
SWIFT_NAME(
901+
"BridgedUnavailableFromAsyncAttr.createParsed(_:atLoc:range:message:)")
902+
BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
903+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
904+
BridgedSourceRange cRange, BridgedStringRef cMessage);
905+
862906
//===----------------------------------------------------------------------===//
863907
// MARK: Decls
864908
//===----------------------------------------------------------------------===//
@@ -895,11 +939,11 @@ BridgedAccessorDecl BridgedAccessorDecl_createParsed(
895939

896940
SWIFT_NAME(
897941
"BridgedPatternBindingDecl.createParsed(_:declContext:bindingKeywordLoc:"
898-
"entries:isStatic:isLet:)")
942+
"entries:attributes:isStatic:isLet:)")
899943
BridgedPatternBindingDecl BridgedPatternBindingDecl_createParsed(
900944
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
901-
BridgedSourceLoc cBindingKeywordLoc, BridgedArrayRef cBindingEntries,
902-
bool isStatic, bool isLet);
945+
BridgedSourceLoc cBindingKeywordLoc, BridgedArrayRef cBindingEntries, BridgedDeclAttributes cAttrs,
946+
bool isStatic, bool isLet);
903947

904948
SWIFT_NAME("BridgedParamDecl.createParsed(_:declContext:specifierLoc:argName:"
905949
"argNameLoc:paramName:paramNameLoc:type:defaultValue:)")

include/swift/AST/ASTBridgingImpl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ swift::Identifier BridgedIdentifier::unbridged() const {
3838
return swift::Identifier::getFromOpaquePointer(Raw);
3939
}
4040

41+
SWIFT_NAME("getter:BridgedIdentifier.isOperator(self:)")
42+
bool BridgedIdentifier_isOperator(const BridgedIdentifier ident) {
43+
return ident.unbridged().isOperator();
44+
}
45+
4146
//===----------------------------------------------------------------------===//
4247
// MARK: BridgedDeclBaseName
4348
//===----------------------------------------------------------------------===//

include/swift/AST/Attr.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1560,7 +1560,6 @@ class SpecializeAttr final
15601560
TrailingWhereClause *clause, bool exported, SpecializationKind kind,
15611561
DeclNameRef targetFunctionName, ArrayRef<Identifier> spiGroups,
15621562
ArrayRef<AvailableAttr *> availabilityAttrs,
1563-
size_t typeErasedParamsCount,
15641563
GenericSignature specializedSignature = nullptr);
15651564

15661565
static SpecializeAttr *create(ASTContext &ctx, bool exported,

include/swift/Parse/Parser.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,6 @@ class Parser {
10831083
AvailabilityRange *SILAvailability,
10841084
SmallVectorImpl<Identifier> &spiGroups,
10851085
SmallVectorImpl<AvailableAttr *> &availableAttrs,
1086-
size_t &typeErasedParamsCount,
10871086
llvm::function_ref<bool(Parser &)> parseSILTargetName,
10881087
llvm::function_ref<bool(Parser &)> parseSILSIPModule);
10891088

lib/AST/ASTDumper.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1594,6 +1594,7 @@ namespace {
15941594

15951595
void visitPatternBindingDecl(PatternBindingDecl *PBD, StringRef label) {
15961596
printCommon(PBD, "pattern_binding_decl", label);
1597+
printAttributes(PBD);
15971598

15981599
for (auto idx : range(PBD->getNumPatternEntries())) {
15991600
printRec(PBD->getPattern(idx));

lib/AST/Attr.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2249,11 +2249,27 @@ SpecializeAttr *SpecializeAttr::create(ASTContext &Ctx, SourceLoc atLoc,
22492249
DeclNameRef targetFunctionName,
22502250
ArrayRef<Identifier> spiGroups,
22512251
ArrayRef<AvailableAttr *> availableAttrs,
2252-
size_t typeErasedParamsCount,
22532252
GenericSignature specializedSignature) {
2253+
size_t typeErasedParamsCount = 0;
2254+
if (Ctx.LangOpts.hasFeature(Feature::LayoutPrespecialization)) {
2255+
if (clause != nullptr) {
2256+
for (auto &req : clause->getRequirements()) {
2257+
if (req.getKind() == RequirementReprKind::LayoutConstraint) {
2258+
if (auto *attributedTy =
2259+
dyn_cast<AttributedTypeRepr>(req.getSubjectRepr())) {
2260+
if (attributedTy->has(TypeAttrKind::NoMetadata)) {
2261+
typeErasedParamsCount += 1;
2262+
}
2263+
}
2264+
}
2265+
}
2266+
}
2267+
}
2268+
22542269
unsigned size = totalSizeToAlloc<Identifier, AvailableAttr *, Type>(
22552270
spiGroups.size(), availableAttrs.size(), typeErasedParamsCount);
22562271
void *mem = Ctx.Allocate(size, alignof(SpecializeAttr));
2272+
22572273
return new (mem)
22582274
SpecializeAttr(atLoc, range, clause, exported, kind, specializedSignature,
22592275
targetFunctionName, spiGroups, availableAttrs, typeErasedParamsCount);

lib/AST/Bridging/DeclAttributeBridging.cpp

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void BridgedDeclAttributes_add(BridgedDeclAttributes *cAttrs,
7373
*cAttrs = attrs;
7474
}
7575

76-
static AccessLevel unbridged(BridgedAccessLevel level) {
76+
static std::optional<AccessLevel> unbridge(BridgedAccessLevel level) {
7777
switch (level) {
7878
case BridgedAccessLevelPrivate:
7979
return AccessLevel::Private;
@@ -87,6 +87,8 @@ static AccessLevel unbridged(BridgedAccessLevel level) {
8787
return AccessLevel::Public;
8888
case BridgedAccessLevelOpen:
8989
return AccessLevel::Open;
90+
case BridgedAccessLevelNone:
91+
return std::nullopt;
9092
}
9193
llvm_unreachable("unhandled BridgedAccessLevel");
9294
}
@@ -96,7 +98,7 @@ BridgedAccessControlAttr_createParsed(BridgedASTContext cContext,
9698
BridgedSourceRange cRange,
9799
BridgedAccessLevel cAccessLevel) {
98100
return new (cContext.unbridged()) AccessControlAttr(
99-
/*atLoc=*/{}, cRange.unbridged(), unbridged(cAccessLevel));
101+
/*atLoc=*/{}, cRange.unbridged(), unbridge(cAccessLevel).value());
100102
}
101103

102104
BridgedAlignmentAttr
@@ -150,6 +152,15 @@ BridgedDynamicReplacementAttr BridgedDynamicReplacementAttr_createParsed(
150152
cRParenLoc.unbridged());
151153
}
152154

155+
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
156+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
157+
BridgedSourceRange cRange, BridgedStringRef cMetadata,
158+
BridgedAccessLevel cAccessLevel) {
159+
return new (cContext.unbridged()) DocumentationAttr(
160+
cAtLoc.unbridged(), cRange.unbridged(), cMetadata.unbridged(),
161+
unbridge(cAccessLevel), /*implicit=*/false);
162+
}
163+
153164
static EffectsKind unbridged(BridgedEffectsKind kind) {
154165
switch (kind) {
155166
case BridgedEffectsKindReadNone:
@@ -315,6 +326,25 @@ BridgedMacroRoleAttr BridgedMacroRoleAttr_createParsed(
315326
conformances, cRParenLoc.unbridged(), /*implicit=*/false);
316327
}
317328

329+
BridgedStorageRestrictionsAttr BridgedStorageRestrictionsAttr_createParsed(
330+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
331+
BridgedSourceRange cRange, BridgedArrayRef cInitializes,
332+
BridgedArrayRef cAccesses) {
333+
ASTContext &context = cContext.unbridged();
334+
335+
ArrayRef<Identifier> initializes =
336+
cContext.unbridged().AllocateTransform<Identifier>(
337+
cInitializes.unbridged<BridgedIdentifier>(),
338+
[](auto &e) { return e.unbridged(); });
339+
ArrayRef<Identifier> accesses =
340+
cContext.unbridged().AllocateTransform<Identifier>(
341+
cAccesses.unbridged<BridgedIdentifier>(),
342+
[](auto &e) { return e.unbridged(); });
343+
344+
return StorageRestrictionsAttr::create(
345+
context, cAtLoc.unbridged(), cRange.unbridged(), initializes, accesses);
346+
}
347+
318348
BridgedSwiftNativeObjCRuntimeBaseAttr
319349
BridgedSwiftNativeObjCRuntimeBaseAttr_createParsed(BridgedASTContext cContext,
320350
BridgedSourceLoc cAtLoc,
@@ -342,6 +372,14 @@ BridgedNonSendableAttr BridgedNonSendableAttr_createParsed(
342372
NonSendableAttr(cAtLoc.unbridged(), cRange.unbridged(), unbridged(cKind));
343373
}
344374

375+
BridgedNonisolatedAttr
376+
BridgedNonisolatedAttr_createParsed(BridgedASTContext cContext,
377+
BridgedSourceLoc cAtLoc,
378+
BridgedSourceRange cRange, bool isUnsafe) {
379+
return new (cContext.unbridged()) NonisolatedAttr(
380+
cAtLoc.unbridged(), cRange.unbridged(), isUnsafe, /*implicit=*/false);
381+
}
382+
345383
BridgedObjCAttr
346384
BridgedObjCAttr_createParsedUnnamed(BridgedASTContext cContext,
347385
BridgedSourceLoc cAtLoc,
@@ -375,7 +413,7 @@ BridgedObjCAttr BridgedObjCAttr_createParsedSelector(
375413

376414
return ObjCAttr::createSelector(
377415
cContext.unbridged(), cAtLoc.unbridged(), cAttrNameLoc.unbridged(),
378-
cLParenLoc.unbridged(), nameLocs, names, cLParenLoc.unbridged());
416+
cLParenLoc.unbridged(), nameLocs, names, cRParenLoc.unbridged());
379417
}
380418

381419
BridgedObjCImplementationAttr BridgedObjCImplementationAttr_createParsed(
@@ -480,7 +518,37 @@ BridgedSetterAccessAttr_createParsed(BridgedASTContext cContext,
480518
BridgedSourceRange cRange,
481519
BridgedAccessLevel cAccessLevel) {
482520
return new (cContext.unbridged()) SetterAccessAttr(
483-
/*atLoc=*/{}, cRange.unbridged(), unbridged(cAccessLevel));
521+
/*atLoc=*/{}, cRange.unbridged(), unbridge(cAccessLevel).value());
522+
}
523+
524+
static SpecializeAttr::SpecializationKind
525+
unbridge(BridgedSpecializationKind kind) {
526+
switch (kind) {
527+
case BridgedSpecializationKindFull:
528+
return SpecializeAttr::SpecializationKind::Full;
529+
case BridgedSpecializationKindPartial:
530+
return SpecializeAttr::SpecializationKind::Partial;
531+
}
532+
llvm_unreachable("unhandled kind");
533+
}
534+
535+
BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
536+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
537+
BridgedSourceRange cRange, BridgedNullableTrailingWhereClause cWhereClause,
538+
bool exported, BridgedSpecializationKind cKind,
539+
BridgedDeclNameRef cTargetFunction, BridgedArrayRef cSPIGroups,
540+
BridgedArrayRef cAvailableAttrs) {
541+
SmallVector<Identifier, 2> spiGroups;
542+
for (auto bridging : cSPIGroups.unbridged<BridgedIdentifier>())
543+
spiGroups.push_back(bridging.unbridged());
544+
SmallVector<AvailableAttr *, 2> availableAttrs;
545+
for (auto bridging : cAvailableAttrs.unbridged<BridgedAvailableAttr>())
546+
availableAttrs.push_back(bridging.unbridged());
547+
548+
return SpecializeAttr::create(
549+
cContext.unbridged(), cAtLoc.unbridged(), cRange.unbridged(),
550+
cWhereClause.unbridged(), exported, unbridge(cKind),
551+
cTargetFunction.unbridged(), spiGroups, availableAttrs);
484552
}
485553

486554
BridgedSPIAccessControlAttr BridgedSPIAccessControlAttr_createParsed(
@@ -500,3 +568,10 @@ BridgedSILGenNameAttr BridgedSILGenNameAttr_createParsed(
500568
cRange.unbridged(), /*Implicit=*/false);
501569
}
502570

571+
BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
572+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
573+
BridgedSourceRange cRange, BridgedStringRef cMessage) {
574+
return new (cContext.unbridged())
575+
UnavailableFromAsyncAttr(cMessage.unbridged(), cAtLoc.unbridged(),
576+
cRange.unbridged(), /*implicit=*/false);
577+
}

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ BridgedAccessorDecl BridgedAccessorDecl_createParsed(
134134

135135
BridgedPatternBindingDecl BridgedPatternBindingDecl_createParsed(
136136
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
137-
BridgedSourceLoc cBindingKeywordLoc, BridgedArrayRef cBindingEntries,
138-
bool isStatic, bool isLet) {
137+
BridgedSourceLoc cBindingKeywordLoc, BridgedArrayRef cBindingEntries, BridgedDeclAttributes cAttrs, bool isStatic, bool isLet) {
139138
ASTContext &context = cContext.unbridged();
140139
DeclContext *declContext = cDeclContext.unbridged();
141140

@@ -147,6 +146,7 @@ BridgedPatternBindingDecl BridgedPatternBindingDecl_createParsed(
147146

148147
// Configure all vars.
149148
pattern->forEachVariable([&](VarDecl *VD) {
149+
VD->getAttrs() = cAttrs.unbridged();
150150
VD->setStatic(isStatic);
151151
VD->setIntroducer(introducer);
152152
});

0 commit comments

Comments
 (0)