Skip to content

Commit 29315e6

Browse files
authored
Merge pull request swiftlang#77598 from rintaro/astgen-switchexpr
[ASTGen] Generate 'switch' expressions
2 parents 5ffdfb9 + ac8dd89 commit 29315e6

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

lib/ASTGen/Sources/ASTGen/Exprs.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ extension ASTGenVisitor {
161161
return self.generate(subscriptCallExpr: node).asExpr
162162
case .superExpr(let node):
163163
return self.generate(superExpr: node).asExpr
164-
case .switchExpr:
165-
break
164+
case .switchExpr(let node):
165+
return self.generate(switchExpr: node).asExpr
166166
case .ternaryExpr:
167167
preconditionFailure("TernaryExprSyntax only appear after operator folding")
168168
case .tryExpr(let node):
@@ -1063,6 +1063,18 @@ extension ASTGenVisitor {
10631063
return .createParsed(self.ctx, superLoc: self.generateSourceLoc(node))
10641064
}
10651065

1066+
func generate(switchExpr node: SwitchExprSyntax) -> BridgedSingleValueStmtExpr {
1067+
let stmt = self.generateSwitchStmt(switchExpr: node)
1068+
1069+
// Wrap in a SingleValueStmtExpr to embed as an expression.
1070+
return .createWithWrappedBranches(
1071+
ctx,
1072+
stmt: stmt.asStmt,
1073+
declContext: declContext,
1074+
mustBeExpr: true
1075+
)
1076+
}
1077+
10661078
func generate(tryExpr node: TryExprSyntax) -> BridgedExpr {
10671079
let tryLoc = self.generateSourceLoc(node.tryKeyword)
10681080
let subExpr = self.generate(expr: node.expression)

test/ASTGen/exprs.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,11 @@ func testOptionalChain(value: TestStruct) {
193193
var value: Int? = 1
194194
value? += 1
195195
}
196+
197+
func testSwitchExpr(value: Int) {
198+
let _ = switch value {
199+
case 0: "foo"
200+
case ...100: "bar"
201+
default: "baz"
202+
}
203+
}

0 commit comments

Comments
 (0)