Skip to content

Commit 1281ae4

Browse files
committed
Try making AccessorDecl take a list of modifiers
1 parent c26399c commit 1281ae4

File tree

15 files changed

+90
-103
lines changed

15 files changed

+90
-103
lines changed

CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ public let DECL_NODES: [Node] = [
9797
nameForDiagnostics: "attributes"
9898
),
9999
Child(
100-
name: "modifier",
101-
kind: .node(kind: .declModifier),
100+
name: "modifiers",
101+
kind: .node(kind: .declModifierList),
102102
nameForDiagnostics: "modifiers",
103103
isOptional: true
104104
),

Sources/SwiftParser/CollectionNodes+Parsable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ extension AccessorDeclListSyntax: SyntaxParseable {
6767
} makeMissing: { remainingTokens, arena in
6868
return RawAccessorDeclSyntax(
6969
attributes: RawAttributeListSyntax(elements: [], arena: arena),
70-
modifier: nil,
70+
modifiers: RawDeclModifierListSyntax(elements: [], arena: arena),
7171
accessorSpecifier: RawTokenSyntax(missing: .keyword, text: "get", arena: arena),
7272
parameters: nil,
7373
effectSpecifiers: nil,

Sources/SwiftParser/Declarations.swift

Lines changed: 6 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1658,8 +1658,7 @@ extension Parser {
16581658

16591659
struct AccessorIntroducer {
16601660
var attributes: RawAttributeListSyntax
1661-
var modifier: RawDeclModifierSyntax?
1662-
var yielding: RawAccessorYieldingModifierSyntax?
1661+
var modifiers: RawDeclModifierListSyntax
16631662
var kind: AccessorDeclSyntax.AccessorSpecifierOptions
16641663
var unexpectedBeforeToken: RawUnexpectedNodesSyntax?
16651664
var token: RawTokenSyntax
@@ -1668,54 +1667,22 @@ extension Parser {
16681667
mutating func parseAccessorIntroducer(
16691668
forcedKind: (AccessorDeclSyntax.AccessorSpecifierOptions, TokenConsumptionHandle)? = nil
16701669
) -> AccessorIntroducer? {
1671-
// Check there is an identifier before consuming
1670+
// Look ahead to verify attributes/modifiers/kind
16721671
var look = self.lookahead()
16731672
let _ = look.consumeAttributeList()
1674-
let hasModifier = look.consume(ifAnyIn: AccessorModifier.self) != nil
1675-
let hasYielding = look.consume(if: TokenSpec(.yielding)) != nil
1673+
let _ = look.consume(anySequence: AccessorModifier.self)
16761674
guard let (kind, _) = look.at(anyIn: AccessorDeclSyntax.AccessorSpecifierOptions.self) ?? forcedKind else {
16771675
return nil
16781676
}
1679-
guard !yielding || [AccessorDeclSyntax.AccessorSpecifierOptions.borrow, .mutate].contains(kind) else {
1680-
// `yielding` can only be followed by `borrow` or `mutate`
1681-
return nil
1682-
}
16831677

16841678
let attrs = self.parseAttributeList()
1685-
1686-
// Parse the contextual keywords for 'mutating' and 'nonmutating' before
1687-
// get and set.
1688-
let modifier: RawDeclModifierSyntax?
1689-
if hasModifier {
1690-
let (unexpectedBeforeName, name) = self.expect(anyIn: AccessorModifier.self, default: .mutating)
1691-
modifier = RawDeclModifierSyntax(
1692-
unexpectedBeforeName,
1693-
name: name,
1694-
detail: nil,
1695-
arena: self.arena
1696-
)
1697-
} else {
1698-
modifier = nil
1699-
}
1700-
1701-
let yielding: RawAccessorYieldingModifierSyntax?
1702-
if hasYielding {
1703-
let (unexpectedBeforeYieldingName, yieldingName) = self.expect(TokenSpec(.yielding))
1704-
yielding = RawAccessorYieldingModifierSyntax(
1705-
unexpectedBeforeYieldingName,
1706-
name: yieldingName,
1707-
arena: self.arena
1708-
)
1709-
} else {
1710-
yielding = nil
1711-
}
1679+
let modifiers = self.parseDeclModifierList()
17121680

17131681
let (unexpectedBeforeIntroducer, introducer) = self.expect(kind.spec)
17141682

17151683
return AccessorIntroducer(
17161684
attributes: attrs,
1717-
modifier: modifier,
1718-
yielding: yielding,
1685+
modifiers: modifiers,
17191686
kind: kind,
17201687
unexpectedBeforeToken: unexpectedBeforeIntroducer,
17211688
token: introducer
@@ -1758,7 +1725,7 @@ extension Parser {
17581725
let body = self.parseOptionalCodeBlock()
17591726
return RawAccessorDeclSyntax(
17601727
attributes: introducer.attributes,
1761-
modifier: introducer.modifier,
1728+
modifiers: introducer.modifiers,
17621729
introducer.unexpectedBeforeToken,
17631730
accessorSpecifier: introducer.token,
17641731
parameters: parameters,

Sources/SwiftParser/Lookahead.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,15 @@ extension Parser.Lookahead {
160160
}
161161
}
162162

163+
// MARK: Skipping a sequence of tokens
164+
165+
extension Parser.Lookahead {
166+
mutating func consume<SpecSet: TokenSpecSet>(anySequence: SpecSet.Type) {
167+
while consume(ifAnyIn: SpecSet.self) != nil {
168+
}
169+
}
170+
}
171+
163172
// MARK: Skipping Tokens
164173

165174
extension Parser.Lookahead {

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftParserDiagnostics/generated/ChildNameForDiagnostics.swift

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftSyntax/generated/RenamedChildrenCompatibility.swift

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftSyntax/generated/SyntaxCollections.swift

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/SwiftSyntax/generated/raw/RawSyntaxNodesAB.swift

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)