Skip to content

Commit d1fbdcc

Browse files
authored
Merge pull request #61809 from zoecarver/astgen-return-stmt
[astgen] Add ReturnStmt visitor.
2 parents c4abc33 + 371eb91 commit d1fbdcc

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc,
105105
void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc,
106106
void *element, void *endLoc);
107107

108+
void *ReturnStmt_create(void *ctx, void *loc, void *_Nullable expr);
109+
110+
108111
void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs);
109112

110113
void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs,

lib/AST/CASTBridging.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, vo
160160
getSourceLocFromPointer(elseLoc), (Stmt *)elseStmt, None, Context);
161161
}
162162

163+
void *ReturnStmt_create(void *ctx, void *loc, void *_Nullable expr) {
164+
ASTContext &Context = *static_cast<ASTContext *>(ctx);
165+
return new (Context) ReturnStmt(getSourceLocFromPointer(loc), (Expr *)expr);
166+
}
167+
163168
void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) {
164169
llvm::SmallVector<ASTNode, 6> nodes;
165170
for (auto node : getArrayRef<ASTNodeBridged>(elements)) {

lib/ASTGen/Sources/ASTGen/Stmts.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,17 @@ extension ASTGenVisitor {
2626

2727
return .stmt(IfStmt_create(ctx, loc, conditions.first!, body, nil, nil))
2828
}
29+
30+
public func visit(_ node: ReturnStmtSyntax) -> ASTNode {
31+
let loc = self.base.advanced(by: node.position.utf8Offset).raw
32+
33+
let expr: ASTNode?
34+
if let expression = node.expression {
35+
expr = visit(expression)
36+
} else {
37+
expr = nil
38+
}
39+
40+
return .stmt(ReturnStmt_create(ctx, loc, expr?.rawValue))
41+
}
2942
}

0 commit comments

Comments
 (0)