Skip to content

Commit 847d0e6

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

File tree

7 files changed

+449
-54
lines changed

7 files changed

+449
-54
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedAccessLevel {
576576
BridgedAccessLevelPackage,
577577
BridgedAccessLevelPublic,
578578
BridgedAccessLevelOpen,
579+
BridgedAccessLevelNone,
579580
};
580581

581582
SWIFT_NAME("BridgedAccessControlAttr.createParsed(_:range:accessLevel:)")
@@ -612,6 +613,13 @@ BridgedCustomAttr BridgedCustomAttr_createParsed(
612613
BridgedNullablePatternBindingInitializer cInitContext,
613614
BridgedNullableArgumentList cArgumentList);
614615

616+
SWIFT_NAME("BridgedDocumentationAttr.createParsed(_:atLoc:range:metadata:"
617+
"accessLevel:)")
618+
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
619+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
620+
BridgedSourceRange cRange, BridgedStringRef cMetadata,
621+
BridgedAccessLevel cAccessLevel);
622+
615623
SWIFT_NAME(
616624
"BridgedDynamicReplacementAttr.createParsed(_:atLoc:attrNameLoc:lParenLoc:"
617625
"replacedFunction:rParenLoc:)")
@@ -739,6 +747,13 @@ BridgedMacroRoleAttr BridgedMacroRoleAttr_createParsed(
739747
BridgedSourceLoc cLParenLoc, BridgedMacroRole cRole, BridgedArrayRef cNames,
740748
BridgedArrayRef cConformances, BridgedSourceLoc cRParenLoc);
741749

750+
SWIFT_NAME("BridgedStorageRestrictionsAttr.createParsed(_:atLoc:range:"
751+
"initializes:accesses:)")
752+
BridgedStorageRestrictionsAttr BridgedStorageRestrictionsAttr_createParsed(
753+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
754+
BridgedSourceRange cRange, BridgedArrayRef cInitializes,
755+
BridgedArrayRef cAccesses);
756+
742757
SWIFT_NAME(
743758
"BridgedSwiftNativeObjCRuntimeBaseAttr.createParsed(_:atLoc:range:name:)")
744759
BridgedSwiftNativeObjCRuntimeBaseAttr
@@ -757,6 +772,12 @@ BridgedNonSendableAttr BridgedNonSendableAttr_createParsed(
757772
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
758773
BridgedSourceRange cRange, BridgedNonSendableKind cKind);
759774

775+
SWIFT_NAME("BridgedNonisolatedAttr.createParsed(_:atLoc:range:isUnsafe:)")
776+
BridgedNonisolatedAttr
777+
BridgedNonisolatedAttr_createParsed(BridgedASTContext cContext,
778+
BridgedSourceLoc cAtLoc,
779+
BridgedSourceRange cRange, bool isUnsafe);
780+
760781
SWIFT_NAME("BridgedObjCAttr.createParsedUnnamed(_:atLoc:attrNameLoc:)")
761782
BridgedObjCAttr
762783
BridgedObjCAttr_createParsedUnnamed(BridgedASTContext cContext,
@@ -848,6 +869,20 @@ BridgedSetterAccessAttr_createParsed(BridgedASTContext cContext,
848869
BridgedSourceRange cRange,
849870
BridgedAccessLevel cAccessLevel);
850871

872+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedSpecializationKind : uint8_t {
873+
BridgedSpecializationKindFull,
874+
BridgedSpecializationKindPartial,
875+
};
876+
877+
SWIFT_NAME("BridgedSpecializeAttr.createParsed(_:atLoc:range:whereClause:"
878+
"exported:kind:taretFunction:spiGroups:availableAttrs:)")
879+
BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
880+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
881+
BridgedSourceRange cRange, BridgedNullableTrailingWhereClause cWhereClause,
882+
bool exported, BridgedSpecializationKind cKind,
883+
BridgedDeclNameRef cTargetFunction, BridgedArrayRef cSPIGroups,
884+
BridgedArrayRef cAvailableAttrs);
885+
851886
SWIFT_NAME(
852887
"BridgedSPIAccessControlAttr.createParsed(_:atLoc:range:spiGroupName:)")
853888
BridgedSPIAccessControlAttr BridgedSPIAccessControlAttr_createParsed(
@@ -859,6 +894,12 @@ BridgedSILGenNameAttr BridgedSILGenNameAttr_createParsed(
859894
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
860895
BridgedSourceRange cRange, BridgedStringRef cName, bool isRaw);
861896

897+
SWIFT_NAME(
898+
"BridgedUnavailableFromAsyncAttr.createParsed(_:atLoc:range:message:)")
899+
BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
900+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
901+
BridgedSourceRange cRange, BridgedStringRef cMessage);
902+
862903
//===----------------------------------------------------------------------===//
863904
// MARK: Decls
864905
//===----------------------------------------------------------------------===//

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/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: 78 additions & 3 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,
@@ -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+
}

0 commit comments

Comments
 (0)