@@ -13,35 +13,47 @@ extension UnsafePointer {
13
13
}
14
14
15
15
enum ASTNode {
16
- case decl( UnsafeMutableRawPointer )
17
- case stmt( UnsafeMutableRawPointer )
18
- case expr( UnsafeMutableRawPointer )
19
- case type( UnsafeMutableRawPointer )
20
- case misc( UnsafeMutableRawPointer )
16
+ case decl( BridgedDecl )
17
+ case stmt( BridgedStmt )
18
+ case expr( BridgedExpr )
19
+ case type( BridgedTypeRepr )
20
+
21
+ var castToExpr : BridgedExpr {
22
+ guard case . expr( let bridged) = self else {
23
+ fatalError ( " Expected an expr " )
24
+ }
25
+ return bridged
26
+ }
21
27
22
- var rawValue : UnsafeMutableRawPointer {
23
- switch self {
24
- case . decl( let ptr) :
25
- return ptr
26
- case . stmt( let ptr) :
27
- return ptr
28
- case . expr( let ptr) :
29
- return ptr
30
- case . type( let ptr) :
31
- return ptr
32
- case . misc( let ptr) :
33
- return ptr
28
+ var castToStmt : BridgedStmt {
29
+ guard case . stmt( let bridged) = self else {
30
+ fatalError ( " Expected a stmt " )
31
+ }
32
+ return bridged
33
+ }
34
+
35
+ var castToDecl : BridgedDecl {
36
+ guard case . decl( let bridged) = self else {
37
+ fatalError ( " Expected a decl " )
38
+ }
39
+ return bridged
40
+ }
41
+
42
+ var castToType : BridgedTypeRepr {
43
+ guard case . type( let bridged) = self else {
44
+ fatalError ( " Expected a type " )
34
45
}
46
+ return bridged
35
47
}
36
48
37
49
var bridged : BridgedASTNode {
38
50
switch self {
39
51
case . expr( let e) :
40
- return BridgedASTNode ( ptr: e, kind: . expr)
52
+ return BridgedASTNode ( ptr: e. ptr! , kind: . expr)
41
53
case . stmt( let s) :
42
- return BridgedASTNode ( ptr: s, kind: . stmt)
54
+ return BridgedASTNode ( ptr: s. ptr! , kind: . stmt)
43
55
case . decl( let d) :
44
- return BridgedASTNode ( ptr: d, kind: . decl)
56
+ return BridgedASTNode ( ptr: d. ptr! , kind: . decl)
45
57
default :
46
58
fatalError ( " Must be expr, stmt, or decl. " )
47
59
}
@@ -92,11 +104,11 @@ struct ASTGenVisitor {
92
104
let swiftASTNodes = generate ( element)
93
105
switch swiftASTNodes {
94
106
case . decl( let d) :
95
- out. append ( d)
107
+ out. append ( d. ptr! )
96
108
case . stmt( let s) :
97
- out. append ( TopLevelCodeDecl_createStmt ( astContext: self . ctx, declContext: self . declContext, startLoc: loc, statement: s, endLoc: loc) )
109
+ out. append ( TopLevelCodeDecl_createStmt ( astContext: self . ctx, declContext: self . declContext, startLoc: loc, statement: s, endLoc: loc) . ptr! )
98
110
case . expr( let e) :
99
- out. append ( TopLevelCodeDecl_createExpr ( astContext: self . ctx, declContext: self . declContext, startLoc: loc, expression: e, endLoc: loc) )
111
+ out. append ( TopLevelCodeDecl_createExpr ( astContext: self . ctx, declContext: self . declContext, startLoc: loc, expression: e, endLoc: loc) . ptr! )
100
112
default :
101
113
fatalError ( " Top level nodes must be decls, stmts, or exprs. " )
102
114
}
@@ -131,24 +143,24 @@ extension ASTGenVisitor {
131
143
}
132
144
133
145
extension ASTGenVisitor {
134
- func generate( _ node: DeclSyntax ) -> ASTNode {
135
- return generate ( Syntax ( node) )
146
+ func generate( _ node: DeclSyntax ) -> BridgedDecl {
147
+ return generate ( Syntax ( node) ) . castToDecl
136
148
}
137
149
138
- func generate( _ node: ExprSyntax ) -> ASTNode {
139
- return generate ( Syntax ( node) )
150
+ func generate( _ node: ExprSyntax ) -> BridgedExpr {
151
+ return generate ( Syntax ( node) ) . castToExpr
140
152
}
141
153
142
154
func generate( _ node: PatternSyntax ) -> ASTNode {
143
155
return generate ( Syntax ( node) )
144
156
}
145
157
146
- func generate( _ node: StmtSyntax ) -> ASTNode {
147
- return generate ( Syntax ( node) )
158
+ func generate( _ node: StmtSyntax ) -> BridgedStmt {
159
+ return generate ( Syntax ( node) ) . castToStmt
148
160
}
149
161
150
- func generate( _ node: TypeSyntax ) -> ASTNode {
151
- return generate ( Syntax ( node) )
162
+ func generate( _ node: TypeSyntax ) -> BridgedTypeRepr {
163
+ return generate ( Syntax ( node) ) . castToType
152
164
}
153
165
154
166
func generate( _ node: some SyntaxChildChoices ) -> ASTNode {
@@ -160,23 +172,23 @@ extension ASTGenVisitor {
160
172
case . actorDecl( let node) :
161
173
return generate ( node)
162
174
case . arrayElement( let node) :
163
- return generate ( node)
175
+ return . expr ( generate ( node) )
164
176
case . arrayExpr( let node) :
165
177
return generate ( node)
166
178
case . arrayType( let node) :
167
179
return generate ( node)
168
180
case . associatedTypeDecl( let node) :
169
181
return generate ( node)
170
182
case . attributedType( let node) :
171
- return generate ( node)
183
+ return . type ( generate ( node) )
172
184
case . booleanLiteralExpr( let node) :
173
185
return generate ( node)
174
186
case . classDecl( let node) :
175
187
return generate ( node)
176
188
case . closureExpr( let node) :
177
189
return generate ( node)
178
190
case . codeBlock( let node) :
179
- return generate ( node)
191
+ return . stmt ( generate ( node) )
180
192
case . codeBlockItem( let node) :
181
193
return generate ( node)
182
194
case . compositionType( let node) :
@@ -190,35 +202,19 @@ extension ASTGenVisitor {
190
202
case . dictionaryType( let node) :
191
203
return generate ( node)
192
204
case . enumCaseDecl( let node) :
193
- return generate ( node)
194
- case . enumCaseElement( let node) :
195
- return generate ( node)
196
- case . enumCaseParameter( let node) :
197
- return generate ( node)
198
- case . enumCaseParameterClause( let node) :
199
- return generate ( node)
205
+ return . decl( generate ( node) )
200
206
case . enumDecl( let node) :
201
207
return generate ( node)
202
208
case . expressionStmt( let node) :
203
- return generate ( node)
209
+ return . stmt ( generate ( node) )
204
210
case . extensionDecl( let node) :
205
211
return generate ( node)
206
212
case . functionCallExpr( let node) :
207
213
return generate ( node)
208
214
case . functionDecl( let node) :
209
215
return generate ( node)
210
- case . functionParameter( let node) :
211
- return generate ( node)
212
- case . functionParameterClause( let node) :
213
- return generate ( node)
214
216
case . functionType( let node) :
215
217
return generate ( node)
216
- case . genericParameter( let node) :
217
- return generate ( node)
218
- case . genericParameterClause( let node) :
219
- return generate ( node)
220
- case . genericWhereClause( let node) :
221
- return generate ( node)
222
218
case . identifierPattern( let node) :
223
219
return generate ( node)
224
220
case . identifierType( let node) :
@@ -230,7 +226,7 @@ extension ASTGenVisitor {
230
226
case . importDecl( let node) :
231
227
return generate ( node)
232
228
case . initializerClause( let node) :
233
- return generate ( node)
229
+ return . expr ( generate ( node) )
234
230
case . initializerDecl( let node) :
235
231
return generate ( node)
236
232
case . integerLiteralExpr( let node) :
@@ -240,7 +236,7 @@ extension ASTGenVisitor {
240
236
case . memberAccessExpr( let node) :
241
237
return generate ( node)
242
238
case . memberBlockItem( let node) :
243
- return generate ( node)
239
+ return . decl ( generate ( node) )
244
240
case . memberType( let node) :
245
241
return generate ( node)
246
242
case . metatypeType( let node) :
@@ -260,15 +256,15 @@ extension ASTGenVisitor {
260
256
case . protocolDecl( let node) :
261
257
return generate ( node)
262
258
case . returnStmt( let node) :
263
- return generate ( node)
259
+ return . stmt ( generate ( node) )
264
260
case . someOrAnyType( let node) :
265
261
return generate ( node)
266
262
case . stringLiteralExpr( let node) :
267
263
return generate ( node)
268
264
case . structDecl( let node) :
269
265
return generate ( node)
270
266
case . tupleExpr( let node) :
271
- return generate ( node)
267
+ return . expr ( generate ( node) )
272
268
case . tupleType( let node) :
273
269
return generate ( node)
274
270
case . typeAliasDecl( let node) :
@@ -284,11 +280,11 @@ extension ASTGenVisitor {
284
280
// Misc visits.
285
281
// TODO: Some of these are called within a single file/method; we may want to move them to the respective files.
286
282
extension ASTGenVisitor {
287
- public func generate( _ node: MemberBlockItemSyntax ) -> ASTNode {
283
+ public func generate( _ node: MemberBlockItemSyntax ) -> BridgedDecl {
288
284
generate ( node. decl)
289
285
}
290
286
291
- public func generate( _ node: InitializerClauseSyntax ) -> ASTNode {
287
+ public func generate( _ node: InitializerClauseSyntax ) -> BridgedExpr {
292
288
generate ( node. value)
293
289
}
294
290
@@ -300,7 +296,7 @@ extension ASTGenVisitor {
300
296
generate ( node. item)
301
297
}
302
298
303
- public func generate( _ node: ArrayElementSyntax ) -> ASTNode {
299
+ public func generate( _ node: ArrayElementSyntax ) -> BridgedExpr {
304
300
generate ( node. expression)
305
301
}
306
302
@@ -314,18 +310,18 @@ extension ASTGenVisitor {
314
310
// 'self.visit(<expr>)' recursion pattern between optional and non-optional inputs.
315
311
extension ASTGenVisitor {
316
312
@inline ( __always)
317
- func generate( _ node: TypeSyntax ? ) -> ASTNode ? {
313
+ func generate( _ node: TypeSyntax ? ) -> BridgedTypeRepr {
318
314
guard let node else {
319
- return nil
315
+ return . init ( ptr : nil )
320
316
}
321
317
322
318
return self . generate ( node)
323
319
}
324
320
325
321
@inline ( __always)
326
- func generate( _ node: ExprSyntax ? ) -> ASTNode ? {
322
+ func generate( _ node: ExprSyntax ? ) -> BridgedExpr {
327
323
guard let node else {
328
- return nil
324
+ return . init ( ptr : nil )
329
325
}
330
326
331
327
return self . generate ( node)
@@ -342,27 +338,27 @@ extension ASTGenVisitor {
342
338
}
343
339
344
340
@inline ( __always)
345
- func generate( _ node: GenericParameterClauseSyntax ? ) -> ASTNode ? {
341
+ func generate( _ node: GenericParameterClauseSyntax ? ) -> BridgedGenericParamList {
346
342
guard let node else {
347
- return nil
343
+ return . init ( ptr : nil )
348
344
}
349
345
350
346
return self . generate ( node)
351
347
}
352
348
353
349
@inline ( __always)
354
- func generate( _ node: GenericWhereClauseSyntax ? ) -> ASTNode ? {
350
+ func generate( _ node: GenericWhereClauseSyntax ? ) -> BridgedTrailingWhereClause {
355
351
guard let node else {
356
- return nil
352
+ return . init ( ptr : nil )
357
353
}
358
354
359
355
return self . generate ( node)
360
356
}
361
357
362
358
@inline ( __always)
363
- func generate( _ node: EnumCaseParameterClauseSyntax ? ) -> ASTNode ? {
359
+ func generate( _ node: EnumCaseParameterClauseSyntax ? ) -> BridgedParameterList {
364
360
guard let node else {
365
- return nil
361
+ return . init ( ptr : nil )
366
362
}
367
363
368
364
return self . generate ( node)
0 commit comments