@@ -14,7 +14,7 @@ import ASTBridging
14
14
import BasicBridging
15
15
import ParseBridging
16
16
// Needed to use BumpPtrAllocator
17
- @_spi ( BumpPtrAllocator) import SwiftSyntax
17
+ @_spi ( BumpPtrAllocator) @ _spi ( ExperimentalLanguageFeatures ) import SwiftSyntax
18
18
19
19
import struct SwiftDiagnostics. Diagnostic
20
20
@@ -132,7 +132,7 @@ struct ASTGenVisitor {
132
132
133
133
for element in node. statements {
134
134
let loc = element. bridgedSourceLoc ( in: self )
135
- let swiftASTNodes = generate ( element)
135
+ let swiftASTNodes = generate ( codeBlockItem : element)
136
136
switch swiftASTNodes {
137
137
case . decl( let d) :
138
138
out. append ( d. raw)
@@ -188,179 +188,67 @@ extension ASTGenVisitor {
188
188
}
189
189
190
190
extension ASTGenVisitor {
191
- func generate( _ node: DeclSyntax ) -> BridgedDecl {
192
- return generate ( Syntax ( node) ) . castToDecl
193
- }
194
-
195
- func generate( _ node: ExprSyntax ) -> BridgedExpr {
196
- if !isExprMigrated( node) {
197
- return generateWithLegacy ( node)
191
+ /// Generate AST from a Syntax node. The node must be a decl, stmt, expr, or
192
+ /// type.
193
+ func generate( _ node: Syntax ) -> ASTNode {
194
+ if let decl = node. as ( DeclSyntax . self) {
195
+ return . decl( self . generate ( decl: decl) )
198
196
}
199
- return generate ( Syntax ( node) ) . castToExpr
200
- }
201
-
202
- func generate( _ node: PatternSyntax ) -> ASTNode {
203
- return generate ( Syntax ( node) )
204
- }
205
-
206
- func generate( _ node: StmtSyntax ) -> BridgedStmt {
207
- return generate ( Syntax ( node) ) . castToStmt
208
- }
209
-
210
- func generate( _ node: TypeSyntax ) -> BridgedTypeRepr {
211
- if !isTypeMigrated( node) {
212
- return generateWithLegacy ( node)
197
+ if let stmt = node. as ( StmtSyntax . self) {
198
+ return . stmt( self . generate ( stmt: stmt) )
199
+ }
200
+ if let expr = node. as ( ExprSyntax . self) {
201
+ return . expr( self . generate ( expr: expr) )
202
+ }
203
+ if let type = node. as ( TypeSyntax . self) {
204
+ return . type( self . generate ( type: type) )
213
205
}
214
- return generate ( Syntax ( node) ) . castToType
215
- }
216
-
217
- func generate( _ node: some SyntaxChildChoices ) -> ASTNode {
218
- return self . generate ( Syntax ( node) )
219
- }
220
206
221
- func generate( _ node: Syntax ) -> ASTNode {
222
- switch node. as ( SyntaxEnum . self) {
223
- case . actorDecl( let node) :
224
- return . decl( generate ( node) . asDecl)
225
- case . arrayElement( let node) :
226
- return . expr( generate ( node) )
227
- case . arrayExpr( let node) :
228
- return . expr( generate ( node) . asExpr)
229
- case . arrayType( let node) :
230
- return . type( generate ( node) )
231
- case . associatedTypeDecl( let node) :
232
- return . decl( generate ( node) . asDecl)
233
- case . attributedType( let node) :
234
- return . type( generate ( node) )
235
- case . booleanLiteralExpr( let node) :
236
- return . expr( generate ( node) . asExpr)
237
- case . classDecl( let node) :
238
- return . decl( generate ( node) . asDecl)
239
- case . closureExpr( let node) :
240
- return . expr( generate ( node) . asExpr)
241
- case . codeBlock( let node) :
242
- return . stmt( generate ( node) . asStmt)
243
- case . codeBlockItem( let node) :
244
- return generate ( node)
245
- case . compositionType( let node) :
246
- return . type( generate ( node) )
247
- case . conditionElement( let node) :
248
- return generate ( node)
249
- case . declReferenceExpr( let node) :
250
- return . expr( generate ( node) . asExpr)
251
- case . deinitializerDecl( let node) :
252
- return . decl( generate ( node) . asDecl)
253
- case . dictionaryType( let node) :
254
- return . type( generate ( node) )
255
- case . enumCaseDecl( let node) :
256
- return . decl( generate ( node) . asDecl)
257
- case . enumDecl( let node) :
258
- return . decl( generate ( node) . asDecl)
259
- case . expressionStmt( let node) :
260
- return . stmt( generate ( node) )
261
- case . extensionDecl( let node) :
262
- return . decl( generate ( node) . asDecl)
263
- case . functionCallExpr( let node) :
264
- return . expr( generate ( node) . asExpr)
265
- case . functionDecl( let node) :
266
- return . decl( generate ( node) . asDecl)
267
- case . functionType( let node) :
268
- return . type( generate ( node) )
269
- case . identifierPattern( let node) :
270
- return . expr( generate ( node) . asExpr)
271
- case . identifierType( let node) :
272
- return . type( generate ( node) )
273
- case . ifExpr( let node) :
274
- return . expr( generate ( node) . asExpr)
275
- case . implicitlyUnwrappedOptionalType( let node) :
276
- return . type( generate ( node) )
277
- case . importDecl( let node) :
278
- return . decl( generate ( node) . asDecl)
279
- case . initializerClause( let node) :
280
- return . expr( generate ( node) )
281
- case . initializerDecl( let node) :
282
- return . decl( generate ( node) . asDecl)
283
- case . integerLiteralExpr( let node) :
284
- return . expr( generate ( node) . asExpr)
285
- case . memberAccessExpr( let node) :
286
- return . expr( generate ( node) . asExpr)
287
- case . memberBlockItem( let node) :
288
- return . decl( generate ( node) )
289
- case . memberType( let node) :
290
- return . type( generate ( node) )
291
- case . metatypeType( let node) :
292
- return . type( generate ( node) )
293
- case . namedOpaqueReturnType( let node) :
294
- return . type( generate ( node) )
295
- case . nilLiteralExpr( let node) :
296
- return . expr( generate ( node) . asExpr)
297
- case . operatorDecl( let node) :
298
- return . decl( generate ( node) . asDecl)
299
- case . optionalType( let node) :
300
- return . type( generate ( node) )
301
- case . packExpansionType( let node) :
302
- return . type( generate ( node) )
303
- case . precedenceGroupDecl( let node) :
304
- return . decl( generate ( node) . asDecl)
305
- case . protocolDecl( let node) :
306
- return . decl( generate ( node) . asDecl)
307
- case . returnStmt( let node) :
308
- return . stmt( generate ( node) . asStmt)
309
- case . someOrAnyType( let node) :
310
- return . type( generate ( node) )
311
- case . stringLiteralExpr( let node) :
312
- return . expr( generate ( node) . asExpr)
313
- case . structDecl( let node) :
314
- return . decl( generate ( node) . asDecl)
315
- case . tupleExpr( let node) :
316
- return . expr( generate ( node) . asExpr)
317
- case . tupleType( let node) :
318
- return . type( generate ( node) )
319
- case . typeAliasDecl( let node) :
320
- return . decl( generate ( node) . asDecl)
321
- case . variableDecl( let node) :
322
- return . decl( generate ( node) . asDecl)
323
-
324
- // Un-migrated nodes.
325
- case _ where node. is ( ExprSyntax . self) :
326
- return . expr( self . generateWithLegacy ( node. cast ( ExprSyntax . self) ) )
327
- case _ where node. is ( StmtSyntax . self) :
328
- return . stmt( self . generateWithLegacy ( node. cast ( StmtSyntax . self) ) )
329
- case _ where node. is ( DeclSyntax . self) :
330
- return . decl( self . generateWithLegacy ( node. cast ( DeclSyntax . self) ) )
207
+ // --- Special cases where `node` doesn't belong to one of the base kinds.
331
208
332
- default :
333
- fatalError ( " case does not correspond to an ASTNode " )
209
+ // CodeBlockSyntax -> BraceStmt.
210
+ if let node = node. as ( CodeBlockSyntax . self) {
211
+ return . stmt( self . generate ( codeBlock: node) . asStmt)
212
+ }
213
+ // CodeBlockItemSyntax -> ASTNode.
214
+ if let node = node. as ( CodeBlockItemSyntax . self) {
215
+ return self . generate ( codeBlockItem: node)
334
216
}
217
+
218
+ fatalError ( " node does not correspond to an ASTNode \( node. kind) " )
335
219
}
336
220
}
337
221
338
222
// Misc visits.
339
223
// TODO: Some of these are called within a single file/method; we may want to move them to the respective files.
340
224
extension ASTGenVisitor {
225
+ func generate( _ node: some SyntaxChildChoices ) -> ASTNode {
226
+ return self . generate ( Syntax ( node) )
227
+ }
228
+
341
229
public func generate( _ node: MemberBlockItemSyntax ) -> BridgedDecl {
342
- generate ( node. decl)
230
+ generate ( decl : node. decl)
343
231
}
344
232
345
233
public func generate( _ node: InitializerClauseSyntax ) -> BridgedExpr {
346
- generate ( node. value)
234
+ generate ( expr : node. value)
347
235
}
348
236
349
237
public func generate( _ node: ConditionElementSyntax ) -> ASTNode {
350
238
generate ( node. condition)
351
239
}
352
240
353
- public func generate( _ node: CodeBlockItemSyntax ) -> ASTNode {
241
+ public func generate( codeBlockItem node: CodeBlockItemSyntax ) -> ASTNode {
354
242
generate ( node. item)
355
243
}
356
244
357
245
public func generate( _ node: ArrayElementSyntax ) -> BridgedExpr {
358
- generate ( node. expression)
246
+ generate ( expr : node. expression)
359
247
}
360
248
361
249
@inline ( __always)
362
250
func generate( _ node: CodeBlockItemListSyntax ) -> BridgedArrayRef {
363
- node. lazy. map { self . generate ( $0) . bridged } . bridgedArray ( in: self )
251
+ node. lazy. map { self . generate ( codeBlockItem : $0) . bridged } . bridgedArray ( in: self )
364
252
}
365
253
}
366
254
@@ -373,7 +261,7 @@ extension ASTGenVisitor {
373
261
return nil
374
262
}
375
263
376
- return self . generate ( node)
264
+ return self . generate ( type : node)
377
265
}
378
266
379
267
@inline ( __always)
@@ -382,7 +270,7 @@ extension ASTGenVisitor {
382
270
return nil
383
271
}
384
272
385
- return self . generate ( node)
273
+ return self . generate ( expr : node)
386
274
}
387
275
388
276
@inline ( __always)
0 commit comments