Skip to content

Commit 11f36a7

Browse files
committed
Properly parse the rethrows attribute.
1 parent 391cb70 commit 11f36a7

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

Sources/SwiftParser/Attributes.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ extension Parser {
183183

184184

185185
let atSign = self.eat(.atSign)
186-
let ident = self.consumeIdentifier()
186+
let ident = self.consumeIdentifierOrRethrows()
187187
let leftParen: RawTokenSyntax?
188188
let arg: RawSyntax?
189189
let unexpectedBeforeRightParen: RawUnexpectedNodesSyntax?

Sources/SwiftParser/Lookahead.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ extension Parser.Lookahead {
146146

147147
repeat {
148148
self.eat(.atSign)
149-
self.consumeIdentifier()
149+
self.consumeIdentifierOrRethrows()
150150
if self.consume(if: .leftParen) != nil {
151151
while !self.at(.eof), !self.at(.rightParen), !self.at(.poundEndifKeyword) {
152152
self.skipSingle()

Sources/SwiftParser/Names.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,19 @@ extension TokenConsumer {
330330
}
331331
}
332332

333+
mutating func consumeIdentifierOrRethrows() -> Token {
334+
switch self.currentToken.tokenKind {
335+
case .selfKeyword,
336+
.capitalSelfKeyword,
337+
.anyKeyword,
338+
.identifier,
339+
.rethrowsKeyword:
340+
return self.consumeAnyToken()
341+
default:
342+
return self.missingToken(.identifier)
343+
}
344+
}
345+
333346
mutating func consumeInteger() -> Token {
334347
switch self.currentToken.tokenKind {
335348
case .integerLiteral:

Tests/SwiftParserTest/Attributes.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,13 @@ final class AttributeTests: XCTestCase {
6666
"""
6767
)
6868
}
69+
70+
func testRethrowsAttribute() {
71+
AssertParse(
72+
"""
73+
@rethrows
74+
protocol P { }
75+
"""
76+
)
77+
}
6978
}

0 commit comments

Comments
 (0)