Skip to content

Commit 498f54e

Browse files
committed
Sketch adding a new yielding field to AccessorIntroducer
to track the presence/absence of the `yielding` token.
1 parent db41cc5 commit 498f54e

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

Sources/SwiftParser/Declarations.swift

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,7 @@ extension Parser {
16591659
struct AccessorIntroducer {
16601660
var attributes: RawAttributeListSyntax
16611661
var modifier: RawDeclModifierSyntax?
1662+
var yielding: RawAccessorYieldingModifierSyntax?
16621663
var kind: AccessorDeclSyntax.AccessorSpecifierOptions
16631664
var unexpectedBeforeToken: RawUnexpectedNodesSyntax?
16641665
var token: RawTokenSyntax
@@ -1671,7 +1672,7 @@ extension Parser {
16711672
var look = self.lookahead()
16721673
let _ = look.consumeAttributeList()
16731674
let hasModifier = look.consume(ifAnyIn: AccessorModifier.self) != nil
1674-
let yielding = look.consume(if: TokenSpec(.yielding)) != nil
1675+
let hasYielding = look.consume(if: TokenSpec(.yielding)) != nil
16751676
guard let (kind, _) = look.at(anyIn: AccessorDeclSyntax.AccessorSpecifierOptions.self) ?? forcedKind else {
16761677
return nil
16771678
}
@@ -1697,27 +1698,24 @@ extension Parser {
16971698
modifier = nil
16981699
}
16991700

1700-
if yielding {
1701-
_ = self.expect(TokenSpec(.yielding))
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
17021711
}
17031712

17041713
let (unexpectedBeforeIntroducer, introducer) = self.expect(kind.spec)
17051714

1706-
// Map `yielding borrow` => `read`, etc.
1707-
let resolvedKind: AccessorDeclSyntax.AccessorSpecifierOptions
1708-
if yielding {
1709-
switch kind {
1710-
case .borrow: resolvedKind = .read // `yielding borrow` == `read`
1711-
case .mutate: resolvedKind = .modify // `yielding mutate` == `modify`
1712-
default: resolvedKind = kind
1713-
}
1714-
} else {
1715-
resolvedKind = kind
1716-
}
1717-
17181715
return AccessorIntroducer(
17191716
attributes: attrs,
17201717
modifier: modifier,
1718+
yielding: yielding,
17211719
kind: resolvedKind,
17221720
unexpectedBeforeToken: unexpectedBeforeIntroducer,
17231721
token: introducer

0 commit comments

Comments
 (0)