Skip to content

Commit 9a25563

Browse files
committed
xxx
1 parent 051ffc5 commit 9a25563

File tree

10 files changed

+913
-838
lines changed

10 files changed

+913
-838
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 257 additions & 213 deletions
Large diffs are not rendered by default.

lib/AST/CASTBridging.cpp

Lines changed: 434 additions & 372 deletions
Large diffs are not rendered by default.

lib/ASTGen/Sources/ASTGen/ASTGen.swift

Lines changed: 65 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,47 @@ extension UnsafePointer {
1313
}
1414

1515
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+
}
2127

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")
3445
}
46+
return bridged
3547
}
3648

3749
var bridged: BridgedASTNode {
3850
switch self {
3951
case .expr(let e):
40-
return BridgedASTNode(ptr: e, kind: .expr)
52+
return BridgedASTNode(ptr: e.ptr!, kind: .expr)
4153
case .stmt(let s):
42-
return BridgedASTNode(ptr: s, kind: .stmt)
54+
return BridgedASTNode(ptr: s.ptr!, kind: .stmt)
4355
case .decl(let d):
44-
return BridgedASTNode(ptr: d, kind: .decl)
56+
return BridgedASTNode(ptr: d.ptr!, kind: .decl)
4557
default:
4658
fatalError("Must be expr, stmt, or decl.")
4759
}
@@ -92,11 +104,11 @@ struct ASTGenVisitor {
92104
let swiftASTNodes = generate(element)
93105
switch swiftASTNodes {
94106
case .decl(let d):
95-
out.append(d)
107+
out.append(d.ptr!)
96108
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!)
98110
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!)
100112
default:
101113
fatalError("Top level nodes must be decls, stmts, or exprs.")
102114
}
@@ -131,24 +143,24 @@ extension ASTGenVisitor {
131143
}
132144

133145
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
136148
}
137149

138-
func generate(_ node: ExprSyntax) -> ASTNode {
139-
return generate(Syntax(node))
150+
func generate(_ node: ExprSyntax) -> BridgedExpr {
151+
return generate(Syntax(node)).castToExpr
140152
}
141153

142154
func generate(_ node: PatternSyntax) -> ASTNode {
143155
return generate(Syntax(node))
144156
}
145157

146-
func generate(_ node: StmtSyntax) -> ASTNode {
147-
return generate(Syntax(node))
158+
func generate(_ node: StmtSyntax) -> BridgedStmt {
159+
return generate(Syntax(node)).castToStmt
148160
}
149161

150-
func generate(_ node: TypeSyntax) -> ASTNode {
151-
return generate(Syntax(node))
162+
func generate(_ node: TypeSyntax) -> BridgedTypeRepr {
163+
return generate(Syntax(node)).castToType
152164
}
153165

154166
func generate(_ node: some SyntaxChildChoices) -> ASTNode {
@@ -160,23 +172,23 @@ extension ASTGenVisitor {
160172
case .actorDecl(let node):
161173
return generate(node)
162174
case .arrayElement(let node):
163-
return generate(node)
175+
return .expr(generate(node))
164176
case .arrayExpr(let node):
165177
return generate(node)
166178
case .arrayType(let node):
167179
return generate(node)
168180
case .associatedTypeDecl(let node):
169181
return generate(node)
170182
case .attributedType(let node):
171-
return generate(node)
183+
return .type(generate(node))
172184
case .booleanLiteralExpr(let node):
173185
return generate(node)
174186
case .classDecl(let node):
175187
return generate(node)
176188
case .closureExpr(let node):
177189
return generate(node)
178190
case .codeBlock(let node):
179-
return generate(node)
191+
return .stmt(generate(node))
180192
case .codeBlockItem(let node):
181193
return generate(node)
182194
case .compositionType(let node):
@@ -190,35 +202,19 @@ extension ASTGenVisitor {
190202
case .dictionaryType(let node):
191203
return generate(node)
192204
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))
200206
case .enumDecl(let node):
201207
return generate(node)
202208
case .expressionStmt(let node):
203-
return generate(node)
209+
return .stmt(generate(node))
204210
case .extensionDecl(let node):
205211
return generate(node)
206212
case .functionCallExpr(let node):
207213
return generate(node)
208214
case .functionDecl(let node):
209215
return generate(node)
210-
case .functionParameter(let node):
211-
return generate(node)
212-
case .functionParameterClause(let node):
213-
return generate(node)
214216
case .functionType(let node):
215217
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)
222218
case .identifierPattern(let node):
223219
return generate(node)
224220
case .identifierType(let node):
@@ -230,7 +226,7 @@ extension ASTGenVisitor {
230226
case .importDecl(let node):
231227
return generate(node)
232228
case .initializerClause(let node):
233-
return generate(node)
229+
return .expr(generate(node))
234230
case .initializerDecl(let node):
235231
return generate(node)
236232
case .integerLiteralExpr(let node):
@@ -240,7 +236,7 @@ extension ASTGenVisitor {
240236
case .memberAccessExpr(let node):
241237
return generate(node)
242238
case .memberBlockItem(let node):
243-
return generate(node)
239+
return .decl(generate(node))
244240
case .memberType(let node):
245241
return generate(node)
246242
case .metatypeType(let node):
@@ -260,15 +256,15 @@ extension ASTGenVisitor {
260256
case .protocolDecl(let node):
261257
return generate(node)
262258
case .returnStmt(let node):
263-
return generate(node)
259+
return .stmt(generate(node))
264260
case .someOrAnyType(let node):
265261
return generate(node)
266262
case .stringLiteralExpr(let node):
267263
return generate(node)
268264
case .structDecl(let node):
269265
return generate(node)
270266
case .tupleExpr(let node):
271-
return generate(node)
267+
return .expr(generate(node))
272268
case .tupleType(let node):
273269
return generate(node)
274270
case .typeAliasDecl(let node):
@@ -284,11 +280,11 @@ extension ASTGenVisitor {
284280
// Misc visits.
285281
// TODO: Some of these are called within a single file/method; we may want to move them to the respective files.
286282
extension ASTGenVisitor {
287-
public func generate(_ node: MemberBlockItemSyntax) -> ASTNode {
283+
public func generate(_ node: MemberBlockItemSyntax) -> BridgedDecl {
288284
generate(node.decl)
289285
}
290286

291-
public func generate(_ node: InitializerClauseSyntax) -> ASTNode {
287+
public func generate(_ node: InitializerClauseSyntax) -> BridgedExpr {
292288
generate(node.value)
293289
}
294290

@@ -300,7 +296,7 @@ extension ASTGenVisitor {
300296
generate(node.item)
301297
}
302298

303-
public func generate(_ node: ArrayElementSyntax) -> ASTNode {
299+
public func generate(_ node: ArrayElementSyntax) -> BridgedExpr {
304300
generate(node.expression)
305301
}
306302

@@ -314,18 +310,18 @@ extension ASTGenVisitor {
314310
// 'self.visit(<expr>)' recursion pattern between optional and non-optional inputs.
315311
extension ASTGenVisitor {
316312
@inline(__always)
317-
func generate(_ node: TypeSyntax?) -> ASTNode? {
313+
func generate(_ node: TypeSyntax?) -> BridgedTypeRepr {
318314
guard let node else {
319-
return nil
315+
return .init(ptr: nil)
320316
}
321317

322318
return self.generate(node)
323319
}
324320

325321
@inline(__always)
326-
func generate(_ node: ExprSyntax?) -> ASTNode? {
322+
func generate(_ node: ExprSyntax?) -> BridgedExpr {
327323
guard let node else {
328-
return nil
324+
return .init(ptr: nil)
329325
}
330326

331327
return self.generate(node)
@@ -342,27 +338,27 @@ extension ASTGenVisitor {
342338
}
343339

344340
@inline(__always)
345-
func generate(_ node: GenericParameterClauseSyntax?) -> ASTNode? {
341+
func generate(_ node: GenericParameterClauseSyntax?) -> BridgedGenericParamList {
346342
guard let node else {
347-
return nil
343+
return .init(ptr: nil)
348344
}
349345

350346
return self.generate(node)
351347
}
352348

353349
@inline(__always)
354-
func generate(_ node: GenericWhereClauseSyntax?) -> ASTNode? {
350+
func generate(_ node: GenericWhereClauseSyntax?) -> BridgedTrailingWhereClause {
355351
guard let node else {
356-
return nil
352+
return .init(ptr: nil)
357353
}
358354

359355
return self.generate(node)
360356
}
361357

362358
@inline(__always)
363-
func generate(_ node: EnumCaseParameterClauseSyntax?) -> ASTNode? {
359+
func generate(_ node: EnumCaseParameterClauseSyntax?) -> BridgedParameterList {
364360
guard let node else {
365-
return nil
361+
return .init(ptr: nil)
366362
}
367363

368364
return self.generate(node)

0 commit comments

Comments
 (0)