Skip to content

Commit aeb7a21

Browse files
committed
[ASTGen] Add back specialized generate() functions for optional nodes
1 parent db4a2a4 commit aeb7a21

File tree

6 files changed

+80
-51
lines changed

6 files changed

+80
-51
lines changed

lib/ASTGen/Sources/ASTGen/ASTGen.swift

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,27 +209,56 @@ extension ASTGenVisitor {
209209
}
210210
}
211211

212-
// Optional node handling.
212+
// Forwarding overloads that take optional syntax nodes. These are defined on demand to achieve a consistent
213+
// 'self.generate(foo: FooSyntax)' recursion pattern between optional and non-optional inputs.
213214
extension ASTGenVisitor {
214-
/// Generate an AST node from an optional node using the generator function.
215-
///
216-
/// Usage:
217-
/// self.map(node.initializer, generate(expr:))
218215
@inline(__always)
219-
func map<Node: SyntaxProtocol, Result: HasNullable>(
216+
func generate(type node: TypeSyntax?) -> BridgedNullableTypeRepr {
217+
self.map(node, generate(type:))
218+
}
219+
220+
@inline(__always)
221+
func generate(expr node: ExprSyntax?) -> BridgedNullableExpr {
222+
self.map(node, generate(expr:))
223+
}
224+
225+
@inline(__always)
226+
func generate(genericParameterClause node: GenericParameterClauseSyntax?) -> BridgedNullableGenericParamList {
227+
self.map(node, generate(genericParameterClause:))
228+
}
229+
230+
@inline(__always)
231+
func generate(genericWhereClause node: GenericWhereClauseSyntax?) -> BridgedNullableTrailingWhereClause {
232+
self.map(node, generate(genericWhereClause:))
233+
}
234+
235+
@inline(__always)
236+
func generate(enumCaseParameterClause node: EnumCaseParameterClauseSyntax?) -> BridgedNullableParameterList {
237+
self.map(node, generate(enumCaseParameterClause:))
238+
}
239+
240+
@inline(__always)
241+
func generate(inheritedTypeList node: InheritedTypeListSyntax?) -> BridgedArrayRef {
242+
self.map(node, generate(inheritedTypeList:))
243+
}
244+
245+
@inline(__always)
246+
func generate(precedenceGroupNameList node: PrecedenceGroupNameListSyntax?) -> BridgedArrayRef {
247+
self.map(node, generate(precedenceGroupNameList:))
248+
}
249+
250+
// Helper function for `generate(foo: FooSyntax?)` methods.
251+
@inline(__always)
252+
private func map<Node: SyntaxProtocol, Result: HasNullable>(
220253
_ node: Node?,
221254
_ body: (Node) -> Result
222255
) -> Result.Nullable {
223256
return Result.asNullable(node.map(body))
224257
}
225258

226-
/// Generate an AST node array from an optional collection node using the
227-
/// generator function. If `nil`, returns an empty array.
228-
///
229-
/// Usage:
230-
/// self.map(node.genericWhereClasuse, generate(genericWhereClause:))
259+
// Helper function for `generate(barList: BarListSyntax?)` methods for collection nodes.
231260
@inline(__always)
232-
func map<Node: SyntaxCollection>(
261+
private func map<Node: SyntaxCollection>(
233262
_ node: Node?,
234263
_ body: (Node) -> BridgedArrayRef
235264
) -> BridgedArrayRef {

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ extension ASTGenVisitor {
8181
typealiasKeywordLoc: node.typealiasKeyword.bridgedSourceLoc(in: self),
8282
name: name,
8383
nameLoc: nameLoc,
84-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
84+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
8585
equalLoc: node.initializer.equal.bridgedSourceLoc(in: self),
8686
underlyingType: self.generate(type: node.initializer.value),
87-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:))
87+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
8888
)
8989
}
9090

@@ -97,9 +97,9 @@ extension ASTGenVisitor {
9797
enumKeywordLoc: node.enumKeyword.bridgedSourceLoc(in: self),
9898
name: name,
9999
nameLoc: nameLoc,
100-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
101-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
102-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
100+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
101+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
102+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
103103
braceRange: BridgedSourceRange(
104104
startToken: node.memberBlock.leftBrace,
105105
endToken: node.memberBlock.rightBrace,
@@ -123,9 +123,9 @@ extension ASTGenVisitor {
123123
structKeywordLoc: node.structKeyword.bridgedSourceLoc(in: self),
124124
name: name,
125125
nameLoc: nameLoc,
126-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
127-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
128-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
126+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
127+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
128+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
129129
braceRange: BridgedSourceRange(
130130
startToken: node.memberBlock.leftBrace,
131131
endToken: node.memberBlock.rightBrace,
@@ -149,9 +149,9 @@ extension ASTGenVisitor {
149149
classKeywordLoc: node.classKeyword.bridgedSourceLoc(in: self),
150150
name: name,
151151
nameLoc: nameLoc,
152-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
153-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
154-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
152+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
153+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
154+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
155155
braceRange: BridgedSourceRange(
156156
startToken: node.memberBlock.leftBrace,
157157
endToken: node.memberBlock.rightBrace,
@@ -176,9 +176,9 @@ extension ASTGenVisitor {
176176
classKeywordLoc: node.actorKeyword.bridgedSourceLoc(in: self),
177177
name: name,
178178
nameLoc: nameLoc,
179-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
180-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
181-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
179+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
180+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
181+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
182182
braceRange: BridgedSourceRange(
183183
startToken: node.memberBlock.leftBrace,
184184
endToken: node.memberBlock.rightBrace,
@@ -207,8 +207,8 @@ extension ASTGenVisitor {
207207
name: name,
208208
nameLoc: nameLoc,
209209
primaryAssociatedTypeNames: primaryAssociatedTypeNames.bridgedArray(in: self),
210-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
211-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
210+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
211+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
212212
braceRange: BridgedSourceRange(
213213
startToken: node.memberBlock.leftBrace,
214214
endToken: node.memberBlock.rightBrace,
@@ -232,9 +232,9 @@ extension ASTGenVisitor {
232232
associatedtypeKeywordLoc: node.associatedtypeKeyword.bridgedSourceLoc(in: self),
233233
name: name,
234234
nameLoc: nameLoc,
235-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
236-
defaultType: self.map(node.initializer?.value, generate(type:)),
237-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:))
235+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
236+
defaultType: self.generate(type: node.initializer?.value),
237+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
238238
)
239239
}
240240
}
@@ -248,8 +248,8 @@ extension ASTGenVisitor {
248248
declContext: self.declContext,
249249
extensionKeywordLoc: node.extensionKeyword.bridgedSourceLoc(in: self),
250250
extendedType: self.generate(type: node.extendedType),
251-
inheritedTypes: self.map(node.inheritanceClause?.inheritedTypes, generate(inheritedTypeList:)),
252-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
251+
inheritedTypes: self.generate(inheritedTypeList: node.inheritanceClause?.inheritedTypes),
252+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
253253
braceRange: BridgedSourceRange(
254254
startToken: node.memberBlock.leftBrace,
255255
endToken: node.memberBlock.rightBrace,
@@ -276,9 +276,9 @@ extension ASTGenVisitor {
276276
declContext: self.declContext,
277277
name: name,
278278
nameLoc: nameLoc,
279-
parameterList: self.map(node.parameterClause, generate(enumCaseParameterClause:)),
279+
parameterList: self.generate(enumCaseParameterClause: node.parameterClause),
280280
equalsLoc: (node.rawValue?.equal).bridgedSourceLoc(in: self),
281-
rawValue: self.map(node.rawValue?.value, generate(expr:))
281+
rawValue: self.generate(expr: node.rawValue?.value)
282282
)
283283
}
284284

@@ -329,13 +329,13 @@ extension ASTGenVisitor {
329329
funcKeywordLoc: node.funcKeyword.bridgedSourceLoc(in: self),
330330
name: name,
331331
nameLoc: nameLoc,
332-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
332+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
333333
parameterList: self.generate(functionParameterClause: node.signature.parameterClause),
334334
asyncSpecifierLoc: (node.signature.effectSpecifiers?.asyncSpecifier).bridgedSourceLoc(in: self),
335335
throwsSpecifierLoc: (node.signature.effectSpecifiers?.throwsSpecifier).bridgedSourceLoc(in: self),
336-
thrownType: self.map(node.signature.effectSpecifiers?.thrownError?.type, generate(type:)),
337-
returnType: self.map(node.signature.returnClause?.type, generate(type:)),
338-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:))
336+
thrownType: self.generate(type: node.signature.effectSpecifiers?.thrownError?.type),
337+
returnType: self.generate(type: node.signature.returnClause?.type),
338+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
339339
)
340340

341341
if let body = node.body {
@@ -354,12 +354,12 @@ extension ASTGenVisitor {
354354
initKeywordLoc: node.initKeyword.bridgedSourceLoc(in: self),
355355
failabilityMarkLoc: node.optionalMark.bridgedSourceLoc(in: self),
356356
isIUO: node.optionalMark?.tokenKind == .exclamationMark,
357-
genericParamList: self.map(node.genericParameterClause, generate(genericParameterClause:)),
357+
genericParamList: self.generate(genericParameterClause: node.genericParameterClause),
358358
parameterList: self.generate(functionParameterClause: node.signature.parameterClause),
359359
asyncSpecifierLoc: (node.signature.effectSpecifiers?.asyncSpecifier).bridgedSourceLoc(in: self),
360360
throwsSpecifierLoc: (node.signature.effectSpecifiers?.throwsSpecifier).bridgedSourceLoc(in: self),
361-
thrownType: self.map(node.signature.effectSpecifiers?.thrownError?.type, generate(type:)),
362-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:))
361+
thrownType: self.generate(type: node.signature.effectSpecifiers?.thrownError?.type),
362+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause)
363363
)
364364

365365
if let body = node.body {
@@ -533,9 +533,9 @@ extension ASTGenVisitor {
533533
assignmentValueLoc: (body.assignment?.value).bridgedSourceLoc(in: self),
534534
isAssignment: assignmentValue,
535535
higherThanKeywordLoc: (body.higherThanRelation?.higherThanOrLowerThanLabel).bridgedSourceLoc(in: self),
536-
higherThanNames: self.map(body.higherThanRelation?.precedenceGroups, generate(precedenceGroupNameList:)),
536+
higherThanNames: self.generate(precedenceGroupNameList: body.higherThanRelation?.precedenceGroups),
537537
lowerThanKeywordLoc: (body.lowerThanRelation?.higherThanOrLowerThanLabel).bridgedSourceLoc(in: self),
538-
lowerThanNames: self.map(body.lowerThanRelation?.precedenceGroups, generate(precedenceGroupNameList:)),
538+
lowerThanNames: self.generate(precedenceGroupNameList: body.lowerThanRelation?.precedenceGroups),
539539
rightBraceLoc: node.rightBrace.bridgedSourceLoc(in: self)
540540
)
541541
}

lib/ASTGen/Sources/ASTGen/Generics.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ extension ASTGenVisitor {
1919
self.ctx,
2020
leftAngleLoc: node.leftAngle.bridgedSourceLoc(in: self),
2121
parameters: node.parameters.lazy.map(self.generate).bridgedArray(in: self),
22-
genericWhereClause: self.map(node.genericWhereClause, generate(genericWhereClause:)),
22+
genericWhereClause: self.generate(genericWhereClause: node.genericWhereClause),
2323
rightAngleLoc: node.rightAngle.bridgedSourceLoc(in: self)
2424
)
2525
}
@@ -44,7 +44,7 @@ extension ASTGenVisitor {
4444
eachKeywordLoc: node.eachKeyword.bridgedSourceLoc(in: self),
4545
name: name,
4646
nameLoc: nameLoc,
47-
inheritedType: self.map(node.inheritedType, generate(type:)),
47+
inheritedType: self.generate(type: node.inheritedType),
4848
index: genericParameterIndex
4949
)
5050
}

lib/ASTGen/Sources/ASTGen/ParameterClause.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ extension ASTGenVisitor {
101101
secondName: secondName,
102102
secondNameLoc: secondNameLoc,
103103
type: type.asNullable,
104-
defaultValue: self.map(node.defaultValue?.value, generate(expr:))
104+
defaultValue: self.generate(expr: node.defaultValue?.value)
105105
)
106106
}
107107
}

lib/ASTGen/Sources/ASTGen/Stmts.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ extension ASTGenVisitor {
7575
condition: conditions.first!.castToExpr,
7676
thenStmt: self.generate(codeBlock: node.body).asStmt,
7777
elseLoc: node.elseKeyword.bridgedSourceLoc(in: self),
78-
elseStmt: self.map(node.elseBody) {
78+
elseStmt: node.elseBody.map {
7979
switch $0 {
8080
case .codeBlock(let node):
8181
return self.generate(codeBlock: node).asStmt
8282
case .ifExpr(let node):
8383
return self.makeIfStmt(node).asStmt
8484
}
85-
}
85+
}.asNullable
8686
)
8787
}
8888

@@ -99,7 +99,7 @@ extension ASTGenVisitor {
9999
.createParsed(
100100
self.ctx,
101101
returnKeywordLoc: node.returnKeyword.bridgedSourceLoc(in: self),
102-
expr: self.map(node.expression, generate(expr:))
102+
expr: self.generate(expr: node.expression)
103103
)
104104
}
105105
}

lib/ASTGen/Sources/ASTGen/Types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ extension ASTGenVisitor {
278278
),
279279
asyncLoc: (node.effectSpecifiers?.asyncSpecifier).bridgedSourceLoc(in: self),
280280
throwsLoc: (node.effectSpecifiers?.throwsSpecifier).bridgedSourceLoc(in: self),
281-
thrownType: self.map(node.effectSpecifiers?.thrownError?.type, generate(type:)),
281+
thrownType: self.generate(type: node.effectSpecifiers?.thrownError?.type),
282282
arrowLoc: node.returnClause.arrow.bridgedSourceLoc(in: self),
283283
resultType: generate(type: node.returnClause.type)
284284
)

0 commit comments

Comments
 (0)