Skip to content

Commit 4a5325a

Browse files
committed
ASTGen: Translate enumeration declarations
1 parent b4b4a58 commit 4a5325a

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,13 @@ void *TypeAliasDecl_create(BridgedASTContext cContext,
358358
void IterableDeclContext_setParsedMembers(BridgedArrayRef members,
359359
void *opaqueDecl);
360360

361+
BridgedDeclContextAndDecl EnumDecl_create(
362+
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
363+
BridgedSourceLoc cEnumKeywordLoc, BridgedIdentifier cName,
364+
BridgedSourceLoc cNameLoc, void *_Nullable opaqueGenericParamList,
365+
BridgedArrayRef cInheritedTypes, void *_Nullable opaqueGenericWhereClause,
366+
BridgedSourceRange cBraceRange);
367+
361368
BridgedDeclContextAndDecl StructDecl_create(
362369
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
363370
BridgedSourceLoc cStructKeywordLoc, BridgedIdentifier cName,

lib/AST/CASTBridging.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,27 @@ convertToInheritedEntries(BridgedArrayRef cInheritedTypes) {
573573
return inheritedEntries;
574574
}
575575

576+
BridgedDeclContextAndDecl EnumDecl_create(
577+
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
578+
BridgedSourceLoc cEnumKeywordLoc, BridgedIdentifier cName,
579+
BridgedSourceLoc cNameLoc, void *_Nullable opaqueGenericParamList,
580+
BridgedArrayRef cInheritedTypes, void *_Nullable opaqueGenericWhereClause,
581+
BridgedSourceRange cBraceRange) {
582+
ASTContext &context = convertASTContext(cContext);
583+
584+
auto *decl = new (context)
585+
EnumDecl(convertSourceLoc(cEnumKeywordLoc), convertIdentifier(cName),
586+
convertSourceLoc(cNameLoc),
587+
context.AllocateCopy(convertToInheritedEntries(cInheritedTypes)),
588+
static_cast<GenericParamList *>(opaqueGenericParamList),
589+
convertDeclContext(cDeclContext));
590+
decl->setTrailingWhereClause(
591+
static_cast<TrailingWhereClause *>(opaqueGenericWhereClause));
592+
decl->setBraces(convertSourceRange(cBraceRange));
593+
594+
return {bridgeDeclContext(decl), static_cast<Decl *>(decl)};
595+
}
596+
576597
BridgedDeclContextAndDecl StructDecl_create(
577598
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
578599
BridgedSourceLoc cStructKeywordLoc, BridgedIdentifier cName,

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,28 @@ extension ASTGenVisitor {
2525
)
2626
}
2727

28+
public func visit(_ node: EnumDeclSyntax) -> ASTNode {
29+
let (name, nameLoc) = node.name.bridgedIdentifierAndSourceLoc(in: self)
30+
31+
let decl = EnumDecl_create(
32+
self.ctx,
33+
self.declContext,
34+
self.bridgedSourceLoc(for: node.enumKeyword),
35+
name,
36+
nameLoc,
37+
self.visit(node.genericParameterClause)?.rawValue,
38+
self.visit(node.inheritanceClause?.inheritedTypes),
39+
self.visit(node.genericWhereClause)?.rawValue,
40+
BridgedSourceRange(startToken: node.memberBlock.leftBrace, endToken: node.memberBlock.rightBrace, in: self)
41+
)
42+
43+
self.withDeclContext(decl.asDeclContext) {
44+
IterableDeclContext_setParsedMembers(self.visit(node.memberBlock.members), decl.asDecl)
45+
}
46+
47+
return .decl(decl.asDecl)
48+
}
49+
2850
public func visit(_ node: StructDeclSyntax) -> ASTNode {
2951
let (name, nameLoc) = node.name.bridgedIdentifierAndSourceLoc(in: self)
3052

test/ASTGen/verify-parse.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ Alias<T>
104104
=
105105
String where T: Proto1
106106

107+
enum
108+
Enum<T>: Proto1 where T: Proto1 {
109+
func method(_ b: Bool) {}
110+
}
111+
107112
struct
108113
Struct
109114
<

0 commit comments

Comments
 (0)