Skip to content

Commit ff6cb11

Browse files
committed
[ASTGen] Introduce 'AvailableAttr::createUnavailableInEmbedded()'
1 parent d60f198 commit ff6cb11

File tree

7 files changed

+38
-53
lines changed

7 files changed

+38
-53
lines changed

include/swift/AST/ASTBridging.h

+7-14
Original file line numberDiff line numberDiff line change
@@ -873,23 +873,10 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedAvailableAttrKind {
873873
BridgedAvailableAttrKindNoAsync,
874874
};
875875

876-
SWIFT_NAME(
877-
"BridgedAvailableAttr.createParsed(_:atLoc:range:domain:domainLoc:kind:message:"
878-
"renamed:introduced:introducedRange:deprecated:deprecatedRange:"
879-
"obsoleted:obsoletedRange:)")
880-
BridgedAvailableAttr BridgedAvailableAttr_createParsed(
881-
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
882-
BridgedSourceRange cRange, BridgedAvailabilityDomain cDomain, BridgedSourceLoc cDomainLoc,
883-
BridgedAvailableAttrKind cKind, BridgedStringRef cMessage,
884-
BridgedStringRef cRenamed, BridgedVersionTuple cIntroduced,
885-
BridgedSourceRange cIntroducedRange, BridgedVersionTuple cDeprecated,
886-
BridgedSourceRange cDeprecatedRange, BridgedVersionTuple cObsoleted,
887-
BridgedSourceRange cObsoletedRange);
888-
889876
SWIFT_NAME("BridgedAvailableAttr.createParsed(_:atLoc:range:domainIdentifier:"
890877
"domainLoc:kind:message:renamed:introduced:introducedRange:"
891878
"deprecated:deprecatedRange:obsoleted:obsoletedRange:)")
892-
BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
879+
BridgedAvailableAttr BridgedAvailableAttr_createParsed(
893880
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
894881
BridgedSourceRange cRange, BridgedIdentifier cDomainIdentifier,
895882
BridgedSourceLoc cDomainLoc, BridgedAvailableAttrKind cKind,
@@ -898,6 +885,12 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
898885
BridgedVersionTuple cDeprecated, BridgedSourceRange cDeprecatedRange,
899886
BridgedVersionTuple cObsoleted, BridgedSourceRange cObsoletedRange);
900887

888+
SWIFT_NAME("BridgedAvailableAttr.createUnavailableInEmbedded(_:atLoc:range:)")
889+
BridgedAvailableAttr
890+
BridgedAvailableAttr_createUnavailableInEmbedded(BridgedASTContext cContext,
891+
BridgedSourceLoc cAtLoc,
892+
BridgedSourceRange cRange);
893+
901894
SWIFT_NAME("BridgedAvailableAttr.setIsGroupMember(self:)")
902895
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr);
903896
SWIFT_NAME("BridgedAvailableAttr.setIsGroupedWithWildcard(self:)")

include/swift/AST/Attr.h

+5
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,11 @@ class AvailableAttr : public DeclAttribute {
888888
llvm::VersionTuple Introduced, llvm::VersionTuple Deprecated,
889889
llvm::VersionTuple Obsoleted);
890890

891+
/// Create an `AvailableAttr` for `@_unavailableInEmbedded`.
892+
static AvailableAttr *createUnavailableInEmbedded(ASTContext &ctx,
893+
SourceLoc AtLoc,
894+
SourceRange Range);
895+
891896
AvailableAttr *clone(ASTContext &C, bool implicit) const;
892897
AvailableAttr *clone(ASTContext &C) const {
893898
return clone(C, isImplicit());

lib/AST/Attr.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -2208,6 +2208,19 @@ AvailableAttr *AvailableAttr::createPlatformVersioned(
22082208
/*SPI=*/false);
22092209
}
22102210

2211+
AvailableAttr *AvailableAttr::createUnavailableInEmbedded(ASTContext &C,
2212+
SourceLoc AtLoc,
2213+
SourceRange Range) {
2214+
return new (C) AvailableAttr(
2215+
AtLoc, Range, AvailabilityDomain::forEmbedded(), SourceLoc(),
2216+
AvailableAttr::Kind::Unavailable, "unavailable in embedded Swift",
2217+
/*Rename=*/StringRef(),
2218+
/*Introduced=*/llvm::VersionTuple(), /*IntroducedRange=*/{},
2219+
/*Deprecated=*/llvm::VersionTuple(), /*DeprecatedRange=*/{},
2220+
/*Obsoleted=*/llvm::VersionTuple(), /*ObsoletedRange=*/{},
2221+
/*Implicit=*/false, /*IsSPI=*/false);
2222+
}
2223+
22112224
bool BackDeployedAttr::isActivePlatform(const ASTContext &ctx,
22122225
bool forTargetVariant) const {
22132226
return isPlatformActive(Platform, ctx.LangOpts, forTargetVariant);

lib/AST/Bridging/DeclAttributeBridging.cpp

+8-19
Original file line numberDiff line numberDiff line change
@@ -130,25 +130,6 @@ static AvailableAttr::Kind unbridge(BridgedAvailableAttrKind value) {
130130
}
131131

132132
BridgedAvailableAttr BridgedAvailableAttr_createParsed(
133-
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
134-
BridgedSourceRange cRange, BridgedAvailabilityDomain cDomain,
135-
BridgedSourceLoc cDomainLoc, BridgedAvailableAttrKind cKind,
136-
BridgedStringRef cMessage, BridgedStringRef cRenamed,
137-
BridgedVersionTuple cIntroduced, BridgedSourceRange cIntroducedRange,
138-
BridgedVersionTuple cDeprecated, BridgedSourceRange cDeprecatedRange,
139-
BridgedVersionTuple cObsoleted, BridgedSourceRange cObsoletedRange) {
140-
return new (cContext.unbridged())
141-
AvailableAttr(cAtLoc.unbridged(), cRange.unbridged(), cDomain.unbridged(),
142-
cDomainLoc.unbridged(), unbridge(cKind),
143-
cMessage.unbridged(), cRenamed.unbridged(),
144-
cIntroduced.unbridged(), cIntroducedRange.unbridged(),
145-
cDeprecated.unbridged(), cDeprecatedRange.unbridged(),
146-
cObsoleted.unbridged(), cObsoletedRange.unbridged(),
147-
/*Implicit=*/false,
148-
/*IsSPI=*/false);
149-
}
150-
151-
BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
152133
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
153134
BridgedSourceRange cRange, BridgedIdentifier cDomainIdentifier,
154135
BridgedSourceLoc cDomainLoc, BridgedAvailableAttrKind cKind,
@@ -168,6 +149,14 @@ BridgedAvailableAttr BridgedAvailableAttr_createParsedIdentifier(
168149
/*IsSPI=*/false);
169150
}
170151

152+
BridgedAvailableAttr
153+
BridgedAvailableAttr_createUnavailableInEmbedded(BridgedASTContext cContext,
154+
BridgedSourceLoc cAtLoc,
155+
BridgedSourceRange cRange) {
156+
return AvailableAttr::createUnavailableInEmbedded(
157+
cContext.unbridged(), cAtLoc.unbridged(), cRange.unbridged());
158+
}
159+
171160
void BridgedAvailableAttr_setIsGroupMember(BridgedAvailableAttr cAttr) {
172161
cAttr.unbridged()->setIsGroupMember();
173162
}

lib/ASTGen/Sources/ASTGen/Availability.swift

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ extension ASTGenVisitor {
311311
if !expanded.isEmpty {
312312
expanded.withElements(ofType: UnsafeRawPointer.self) { buffer in
313313
for ptr in buffer {
314+
// TODO: Clone and spec.setMacroLoc().
314315
result.append(BridgedAvailabilitySpec(raw: UnsafeMutableRawPointer(mutating: ptr)))
315316
}
316317
}

lib/ASTGen/Sources/ASTGen/DeclAttrs.swift

+2-13
Original file line numberDiff line numberDiff line change
@@ -2120,21 +2120,10 @@ extension ASTGenVisitor {
21202120

21212121
func generateUnavailableInEmbeddedAttr(attribute node: AttributeSyntax) -> BridgedAvailableAttr? {
21222122
if ctx.langOptsHasFeature(.Embedded) {
2123-
return BridgedAvailableAttr.createParsed(
2123+
return BridgedAvailableAttr.createUnavailableInEmbedded(
21242124
self.ctx,
21252125
atLoc: self.generateSourceLoc(node.atSign),
2126-
range: self.generateAttrSourceRange(node),
2127-
domain: .forEmbedded(),
2128-
domainLoc: nil,
2129-
kind: .unavailable,
2130-
message: "unavailable in embedded Swift",
2131-
renamed: "",
2132-
introduced: BridgedVersionTuple(),
2133-
introducedRange: BridgedSourceRange(),
2134-
deprecated: BridgedVersionTuple(),
2135-
deprecatedRange: BridgedSourceRange(),
2136-
obsoleted: BridgedVersionTuple(),
2137-
obsoletedRange: BridgedSourceRange()
2126+
range: self.generateAttrSourceRange(node)
21382127
)
21392128
} else {
21402129
// For non-Embedded mode, ignore it.

lib/Parse/ParseDecl.cpp

+2-7
Original file line numberDiff line numberDiff line change
@@ -4299,13 +4299,8 @@ ParserStatus Parser::parseDeclAttribute(DeclAttributes &Attributes,
42994299
if (!DK && Tok.getText() == UNAVAILABLE_IN_EMBEDDED_ATTRNAME) {
43004300
SourceLoc attrLoc = consumeToken();
43014301
if (Context.LangOpts.hasFeature(Feature::Embedded)) {
4302-
StringRef Message = "unavailable in embedded Swift", Renamed;
4303-
auto attr = new (Context) AvailableAttr(
4304-
AtLoc, SourceRange(AtLoc, attrLoc), AvailabilityDomain::forEmbedded(),
4305-
SourceLoc(), AvailableAttr::Kind::Unavailable, Message, Renamed,
4306-
llvm::VersionTuple(), SourceRange(), llvm::VersionTuple(),
4307-
SourceRange(), llvm::VersionTuple(), SourceRange(),
4308-
/*Implicit=*/false, /*IsSPI=*/false);
4302+
auto attr = AvailableAttr::createUnavailableInEmbedded(
4303+
Context, AtLoc, SourceRange(AtLoc, attrLoc));
43094304
Attributes.add(attr);
43104305
}
43114306
return makeParserSuccess();

0 commit comments

Comments
 (0)