Skip to content

Commit 87e1406

Browse files
committed
[ASTGen] Implement bridging for using declaration
1 parent 816ea9f commit 87e1406

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,6 +1744,19 @@ BridgedImportDecl BridgedImportDecl_createParsed(
17441744
BridgedSourceLoc cImportKeywordLoc, BridgedImportKind cImportKind,
17451745
BridgedSourceLoc cImportKindLoc, BridgedArrayRef cImportPathElements);
17461746

1747+
enum ENUM_EXTENSIBILITY_ATTR(open) BridgedUsingSpecifier {
1748+
BridgedUsingSpecifierMainActor,
1749+
BridgedUsingSpecifierNonisolated,
1750+
};
1751+
1752+
SWIFT_NAME("BridgedUsingDecl.createParsed(_:declContext:usingKeywordLoc:"
1753+
"specifierLoc:specifier:)")
1754+
BridgedUsingDecl BridgedUsingDecl_createParsed(BridgedASTContext cContext,
1755+
BridgedDeclContext cDeclContext,
1756+
BridgedSourceLoc usingKeywordLoc,
1757+
BridgedSourceLoc specifierLoc,
1758+
BridgedUsingSpecifier specifier);
1759+
17471760
SWIFT_NAME("BridgedSubscriptDecl.createParsed(_:declContext:staticLoc:"
17481761
"staticSpelling:subscriptKeywordLoc:genericParamList:parameterList:"
17491762
"arrowLoc:returnType:genericWhereClause:)")

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,17 @@ BridgedImportDecl BridgedImportDecl_createParsed(
637637
std::move(builder).get());
638638
}
639639

640+
BridgedUsingDecl BridgedUsingDecl_createParsed(BridgedASTContext cContext,
641+
BridgedDeclContext cDeclContext,
642+
BridgedSourceLoc usingKeywordLoc,
643+
BridgedSourceLoc specifierLoc,
644+
BridgedUsingSpecifier specifier) {
645+
ASTContext &ctx = cContext.unbridged();
646+
return UsingDecl::create(
647+
ctx, usingKeywordLoc.unbridged(), specifierLoc.unbridged(),
648+
static_cast<UsingSpecifier>(specifier), cDeclContext.unbridged());
649+
}
650+
640651
BridgedSubscriptDecl BridgedSubscriptDecl_createParsed(
641652
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
642653
BridgedSourceLoc cStaticLoc, BridgedStaticSpelling cStaticSpelling,

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ extension ASTGenVisitor {
6969
return self.generate(typeAliasDecl: node)?.asDecl
7070
case .variableDecl(let node):
7171
return self.generate(variableDecl: node)
72+
case .usingDecl(let node):
73+
return self.generate(usingDecl: node)?.asDecl
7274
}
7375
}
7476

@@ -1083,6 +1085,35 @@ extension ASTGenVisitor {
10831085
}
10841086
}
10851087

1088+
extension ASTGenVisitor {
1089+
func generate(usingDecl node: UsingDeclSyntax) -> BridgedUsingDecl? {
1090+
var specifier: BridgedUsingSpecifier? = nil
1091+
1092+
switch node.specifier {
1093+
case .attribute(let attr):
1094+
if attr.attributeName == TypeSyntax("MainActor") {
1095+
specifier = .mainActor
1096+
}
1097+
case .modifier(let modifier):
1098+
if case .keyword(.nonisolated) = modifier.tokenKind {
1099+
specifier = .nonisolated
1100+
}
1101+
}
1102+
1103+
guard let specifier else {
1104+
return nil
1105+
}
1106+
1107+
return BridgedUsingDecl.createParsed(
1108+
self.ctx,
1109+
declContext: self.declContext,
1110+
usingKeywordLoc: self.generateSourceLoc(node.usingKeyword),
1111+
specifierLoc: self.generateSourceLoc(node.specifier),
1112+
specifier: specifier
1113+
)
1114+
}
1115+
}
1116+
10861117
extension ASTGenVisitor {
10871118
func generate(memberBlockItem node: MemberBlockItemSyntax) -> BridgedDecl? {
10881119
if let node = node.decl.as(MacroExpansionDeclSyntax.self) {

0 commit comments

Comments
 (0)