Skip to content

Commit 081fc7e

Browse files
authored
Merge pull request #2957 from rintaro/raw-arena-rdar144177851
[SwiftParser] Use raw.arena instead of parser.arena to construct Syntax
2 parents 7a37286 + f315db6 commit 081fc7e

File tree

4 files changed

+28
-24
lines changed

4 files changed

+28
-24
lines changed

CodeGeneration/Sources/generate-swift-syntax/templates/swiftparser/LayoutNodesParsableFile.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ let layoutNodesParsableFile = SourceFileSyntax(leadingTrivia: copyrightHeader) {
4141
defer { withExtendedLifetime(parser) {} }
4242
let node = parser.\(parserFunction)()
4343
let raw = RawSyntax(parser.parseRemainder(into: node))
44-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
44+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
4545
}
4646
}
4747
"""

Sources/SwiftParser/CollectionNodes+Parsable.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fileprivate extension SyntaxCollection {
3535
let node = parse(&parser)
3636

3737
if parser.at(.endOfFile) {
38-
return Syntax(raw: node.raw, rawNodeArena: parser.arena).cast(Self.self)
38+
return Syntax(raw: node.raw, rawNodeArena: node.raw.arena).cast(Self.self)
3939
}
4040

4141
let layoutView = node.raw.layoutView!
@@ -45,7 +45,7 @@ fileprivate extension SyntaxCollection {
4545
assert(!remainingTokens.isEmpty)
4646
let missing = makeMissing(remainingTokens, parser.arena)
4747
let raw = layoutView.insertingChild(missing.raw, at: node.raw.layoutView!.children.count, arena: parser.arena)
48-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
48+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
4949
} else {
5050
// First unwrap: We know that children.last exists because children is not empty
5151
// Second unwrap: This is a collection and collections never have optional children. Thus the last child can’t be nil.
@@ -55,7 +55,7 @@ fileprivate extension SyntaxCollection {
5555
with: lastWithRemainder,
5656
arena: parser.arena
5757
)
58-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
58+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
5959
}
6060
}
6161
}

Sources/SwiftParser/generated/LayoutNodes+Parsable.swift

+20-20
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ extension AccessorBlockSyntax: SyntaxParseable {
3636
}
3737
let node = parser.parseAccessorBlock()
3838
let raw = RawSyntax(parser.parseRemainder(into: node))
39-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
39+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
4040
}
4141
}
4242

@@ -54,7 +54,7 @@ extension AccessorDeclSyntax: SyntaxParseable {
5454
}
5555
let node = parser.parseAccessorDecl()
5656
let raw = RawSyntax(parser.parseRemainder(into: node))
57-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
57+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
5858
}
5959
}
6060

@@ -72,7 +72,7 @@ extension AttributeSyntax: SyntaxParseable {
7272
}
7373
let node = parser.parseAttribute()
7474
let raw = RawSyntax(parser.parseRemainder(into: node))
75-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
75+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
7676
}
7777
}
7878

@@ -90,7 +90,7 @@ extension AvailabilityMacroDefinitionSyntax: SyntaxParseable {
9090
}
9191
let node = parser.parseAvailabilityMacroDefinition()
9292
let raw = RawSyntax(parser.parseRemainder(into: node))
93-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
93+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
9494
}
9595
}
9696

@@ -108,7 +108,7 @@ extension CatchClauseSyntax: SyntaxParseable {
108108
}
109109
let node = parser.parseCatchClause()
110110
let raw = RawSyntax(parser.parseRemainder(into: node))
111-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
111+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
112112
}
113113
}
114114

@@ -126,7 +126,7 @@ extension ClosureParameterSyntax: SyntaxParseable {
126126
}
127127
let node = parser.parseClosureParameter()
128128
let raw = RawSyntax(parser.parseRemainder(into: node))
129-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
129+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
130130
}
131131
}
132132

@@ -144,7 +144,7 @@ extension CodeBlockItemSyntax: SyntaxParseable {
144144
}
145145
let node = parser.parseNonOptionalCodeBlockItem()
146146
let raw = RawSyntax(parser.parseRemainder(into: node))
147-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
147+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
148148
}
149149
}
150150

@@ -162,7 +162,7 @@ extension CodeBlockSyntax: SyntaxParseable {
162162
}
163163
let node = parser.parseCodeBlock()
164164
let raw = RawSyntax(parser.parseRemainder(into: node))
165-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
165+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
166166
}
167167
}
168168

@@ -180,7 +180,7 @@ extension DeclSyntax: SyntaxParseable {
180180
}
181181
let node = parser.parseDeclaration()
182182
let raw = RawSyntax(parser.parseRemainder(into: node))
183-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
183+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
184184
}
185185
}
186186

@@ -198,7 +198,7 @@ extension EnumCaseParameterSyntax: SyntaxParseable {
198198
}
199199
let node = parser.parseEnumCaseParameter()
200200
let raw = RawSyntax(parser.parseRemainder(into: node))
201-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
201+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
202202
}
203203
}
204204

@@ -216,7 +216,7 @@ extension ExprSyntax: SyntaxParseable {
216216
}
217217
let node = parser.parseExpression()
218218
let raw = RawSyntax(parser.parseRemainder(into: node))
219-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
219+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
220220
}
221221
}
222222

@@ -234,7 +234,7 @@ extension FunctionParameterSyntax: SyntaxParseable {
234234
}
235235
let node = parser.parseFunctionParameter()
236236
let raw = RawSyntax(parser.parseRemainder(into: node))
237-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
237+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
238238
}
239239
}
240240

@@ -252,7 +252,7 @@ extension GenericParameterClauseSyntax: SyntaxParseable {
252252
}
253253
let node = parser.parseGenericParameters()
254254
let raw = RawSyntax(parser.parseRemainder(into: node))
255-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
255+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
256256
}
257257
}
258258

@@ -270,7 +270,7 @@ extension MemberBlockSyntax: SyntaxParseable {
270270
}
271271
let node = parser.parseMemberBlock()
272272
let raw = RawSyntax(parser.parseRemainder(into: node))
273-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
273+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
274274
}
275275
}
276276

@@ -288,7 +288,7 @@ extension PatternSyntax: SyntaxParseable {
288288
}
289289
let node = parser.parsePattern()
290290
let raw = RawSyntax(parser.parseRemainder(into: node))
291-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
291+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
292292
}
293293
}
294294

@@ -306,7 +306,7 @@ extension SourceFileSyntax: SyntaxParseable {
306306
}
307307
let node = parser.parseSourceFile()
308308
let raw = RawSyntax(parser.parseRemainder(into: node))
309-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
309+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
310310
}
311311
}
312312

@@ -324,7 +324,7 @@ extension StmtSyntax: SyntaxParseable {
324324
}
325325
let node = parser.parseStatement()
326326
let raw = RawSyntax(parser.parseRemainder(into: node))
327-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
327+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
328328
}
329329
}
330330

@@ -342,7 +342,7 @@ extension SwitchCaseSyntax: SyntaxParseable {
342342
}
343343
let node = parser.parseSwitchCase()
344344
let raw = RawSyntax(parser.parseRemainder(into: node))
345-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
345+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
346346
}
347347
}
348348

@@ -360,7 +360,7 @@ extension TypeSyntax: SyntaxParseable {
360360
}
361361
let node = parser.parseType()
362362
let raw = RawSyntax(parser.parseRemainder(into: node))
363-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
363+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
364364
}
365365
}
366366

@@ -378,7 +378,7 @@ extension VersionTupleSyntax: SyntaxParseable {
378378
}
379379
let node = parser.parseVersionTuple()
380380
let raw = RawSyntax(parser.parseRemainder(into: node))
381-
return Syntax(raw: raw, rawNodeArena: parser.arena).cast(Self.self)
381+
return Syntax(raw: raw, rawNodeArena: raw.arena).cast(Self.self)
382382
}
383383
}
384384

Sources/SwiftSyntax/Raw/RawSyntax.swift

+4
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public struct RawSyntax: Sendable {
218218
@_transparent unsafeAddress { pointer.pointer }
219219
}
220220

221+
public var arena: RetainedSyntaxArena {
222+
arenaReference.retained
223+
}
224+
221225
internal var arenaReference: SyntaxArenaRef {
222226
rawData.arenaReference
223227
}

0 commit comments

Comments
 (0)