Skip to content

Commit 834d98d

Browse files
committed
[ASTGen] Genrate InOutExpr
1 parent 09f49b0 commit 834d98d

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,11 @@ BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
13421342
BridgedASTContext cContext, BridgedSourceLoc cAsLoc,
13431343
BridgedSourceLoc cExclaimLoc, BridgedTypeRepr cType);
13441344

1345+
SWIFT_NAME("BridgedInOutExpr.createParsed(_:loc:subExpr:)")
1346+
BridgedInOutExpr BridgedInOutExpr_createParsed(BridgedASTContext cContext,
1347+
BridgedSourceLoc cLoc,
1348+
BridgedExpr cSubExpr);
1349+
13451350
SWIFT_NAME("BridgedIntegerLiteralExpr.createParsed(_:value:loc:)")
13461351
BridgedIntegerLiteralExpr
13471352
BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,

lib/AST/Bridging/ExprBridging.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,15 @@ BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
228228
cType.unbridged());
229229
}
230230

231+
SWIFT_NAME("InOutExpr.createParsed(_:loc:subExpr:)")
232+
BridgedInOutExpr BridgedInOutExpr_createParsed(BridgedASTContext cContext,
233+
BridgedSourceLoc cLoc,
234+
BridgedExpr cSubExpr) {
235+
ASTContext &context = cContext.unbridged();
236+
return new (context)
237+
InOutExpr(cLoc.unbridged(), cSubExpr.unbridged(), Type());
238+
}
239+
231240
BridgedIntegerLiteralExpr
232241
BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,
233242
BridgedStringRef cStr,

lib/ASTGen/Sources/ASTGen/Exprs.swift

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,22 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
4040
while true {
4141
switch current.kind {
4242
// Known implemented kinds.
43-
case .arrayExpr, .arrowExpr, .assignmentExpr, .awaitExpr, .binaryOperatorExpr,
43+
case .asExpr, .arrayExpr, .arrowExpr, .assignmentExpr, .awaitExpr, .binaryOperatorExpr,
4444
.booleanLiteralExpr, .borrowExpr, .closureExpr, .consumeExpr, .copyExpr,
4545
.discardAssignmentExpr, .declReferenceExpr, .dictionaryExpr, .floatLiteralExpr,
46-
.functionCallExpr, .ifExpr, .integerLiteralExpr, .memberAccessExpr,
46+
.functionCallExpr, .ifExpr,
47+
.infixOperatorExpr, .inOutExpr, .integerLiteralExpr, .memberAccessExpr,
4748
.nilLiteralExpr, .packElementExpr, .packExpansionExpr, .patternExpr,
4849
.postfixOperatorExpr, .prefixOperatorExpr, .regexLiteralExpr, .sequenceExpr,
4950
.simpleStringLiteralExpr, .subscriptCallExpr, .stringLiteralExpr, .superExpr,
5051
.tryExpr, .tupleExpr, .typeExpr, .unresolvedAsExpr, .unresolvedIsExpr,
51-
.unresolvedTernaryExpr:
52+
.unresolvedTernaryExpr, .ternaryExpr:
5253
break
5354

5455
// Known unimplemented kinds.
55-
case .asExpr,
56-
.doExpr, .editorPlaceholderExpr, .forceUnwrapExpr, .inOutExpr,
57-
.infixOperatorExpr, .isExpr, .keyPathExpr, .macroExpansionExpr,
56+
case .doExpr, .editorPlaceholderExpr, .forceUnwrapExpr, .isExpr, .keyPathExpr, .macroExpansionExpr,
5857
.optionalChainingExpr, .postfixIfConfigExpr, .genericSpecializationExpr,
59-
.switchExpr, .ternaryExpr:
58+
.switchExpr:
6059
return false
6160

6261
// Unknown expr kinds.
@@ -85,7 +84,7 @@ extension ASTGenVisitor {
8584
case .arrowExpr:
8685
preconditionFailure("should be handled in generate(sequenceExpr:)")
8786
case .asExpr:
88-
break
87+
preconditionFailure("AsExprSyntax expression only appear after operator folding")
8988
case .assignmentExpr:
9089
preconditionFailure("should be handled in generate(sequenceExpr:)")
9190
case .awaitExpr(let node):
@@ -122,10 +121,10 @@ extension ASTGenVisitor {
122121
break
123122
case .ifExpr(let node):
124123
return self.generate(ifExpr: node).asExpr
125-
case .inOutExpr:
126-
break
124+
case .inOutExpr(let node):
125+
return self.generate(inOutExpr: node).asExpr
127126
case .infixOperatorExpr:
128-
break
127+
preconditionFailure("InfixOperatorExprSyntax only appear after operator folding")
129128
case .integerLiteralExpr(let node):
130129
return self.generate(integerLiteralExpr: node).asExpr
131130
case .isExpr:
@@ -169,8 +168,8 @@ extension ASTGenVisitor {
169168
return self.generate(superExpr: node).asExpr
170169
case .switchExpr:
171170
break
172-
case .ternaryExpr(let node):
173-
preconditionFailure("Ternary expression only appear after operator folding")
171+
case .ternaryExpr:
172+
preconditionFailure("TernaryExprSyntax only appear after operator folding")
174173
case .tryExpr(let node):
175174
return self.generate(tryExpr: node)
176175
case .tupleExpr(let node):
@@ -500,6 +499,15 @@ extension ASTGenVisitor {
500499
)
501500
}
502501

502+
func generate(inOutExpr node: InOutExprSyntax) -> BridgedInOutExpr {
503+
let subExpr = self.generate(expr: node.expression)
504+
return .createParsed(
505+
self.ctx,
506+
loc: self.generateSourceLoc(node.ampersand),
507+
subExpr: subExpr
508+
)
509+
}
510+
503511
func generate(ifExpr node: IfExprSyntax) -> BridgedSingleValueStmtExpr {
504512
let stmt = generateIfStmt(ifExpr: node).asStmt
505513

0 commit comments

Comments
 (0)