Skip to content

Commit 799463b

Browse files
committed
[astgen] Add ASTNodeKind; support decls in code-blocks.
1 parent f05302b commit 799463b

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,15 @@ void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable name,
130130
void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then,
131131
void *_Nullable elseLoc, void *_Nullable elseStmt);
132132

133+
typedef enum ENUM_EXTENSIBILITY_ATTR(open) ASTNodeKind : long {
134+
ASTNodeKindExpr,
135+
ASTNodeKindStmt,
136+
ASTNodeKindDecl
137+
} ASTNodeKind;
138+
133139
struct ASTNodeBridged {
134140
void *ptr;
135-
_Bool isExpr; // Must be expr or stmt.
141+
ASTNodeKind kind;
136142
};
137143

138144
void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements,

lib/AST/CASTBridging.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,16 @@ void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements,
164164
void *rbloc) {
165165
llvm::SmallVector<ASTNode, 6> nodes;
166166
for (auto node : getArrayRef<ASTNodeBridged>(elements)) {
167-
if (node.isExpr) {
167+
if (node.kind == ASTNodeKindExpr) {
168168
auto expr = (Expr *)node.ptr;
169169
nodes.push_back(expr);
170-
} else {
170+
} else if (node.kind == ASTNodeKindStmt) {
171171
auto stmt = (Stmt *)node.ptr;
172172
nodes.push_back(stmt);
173+
} else {
174+
assert(node.kind == ASTNodeKindDecl);
175+
auto decl = (Decl *)node.ptr;
176+
nodes.push_back(decl);
173177
}
174178
}
175179

lib/ASTGen/Sources/ASTGen/ASTGen.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ enum ASTNode {
3838
func bridged() -> ASTNodeBridged {
3939
switch self {
4040
case .expr(let e):
41-
return ASTNodeBridged(ptr: e, isExpr: true)
41+
return ASTNodeBridged(ptr: e, kind: .expr)
4242
case .stmt(let s):
43-
return ASTNodeBridged(ptr: s, isExpr: false)
43+
return ASTNodeBridged(ptr: s, kind: .stmt)
44+
case .decl(let d):
45+
return ASTNodeBridged(ptr: d, kind: .decl)
4446
default:
4547
fatalError("Must be expr or stmt.")
4648
}

0 commit comments

Comments
 (0)