@@ -117,7 +117,7 @@ extension Parser {
117
117
( . obsoleted, let handle) ? :
118
118
let argumentLabel = self . eat ( handle)
119
119
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
120
- let version = self . parseVersionTuple ( maxComponentCount : 3 )
120
+ let version = self . parseVersionTuple ( )
121
121
entry = . availabilityLabeledArgument(
122
122
RawAvailabilityLabeledArgumentSyntax (
123
123
label: argumentLabel,
@@ -130,7 +130,7 @@ extension Parser {
130
130
case ( . deprecated, let handle) ? :
131
131
let argumentLabel = self . eat ( handle)
132
132
if let colon = self . consume ( if: . colon) {
133
- let version = self . parseVersionTuple ( maxComponentCount : 3 )
133
+ let version = self . parseVersionTuple ( )
134
134
entry = . availabilityLabeledArgument(
135
135
RawAvailabilityLabeledArgumentSyntax (
136
136
label: argumentLabel,
@@ -210,7 +210,7 @@ extension Parser {
210
210
211
211
let version : RawVersionTupleSyntax ?
212
212
if self . at ( . integerLiteral, . floatLiteral) {
213
- version = self . parseVersionTuple ( maxComponentCount : 3 )
213
+ version = self . parseVersionTuple ( )
214
214
} else {
215
215
version = nil
216
216
}
@@ -254,7 +254,7 @@ extension Parser {
254
254
}
255
255
256
256
/// Parse a dot-separated list of version numbers.
257
- mutating func parseVersionTuple( maxComponentCount : Int ) -> RawVersionTupleSyntax {
257
+ mutating func parseVersionTuple( ) -> RawVersionTupleSyntax {
258
258
if self . at ( . floatLiteral) ,
259
259
let periodIndex = self . currentToken. tokenText. firstIndex ( of: UInt8 ( ascii: " . " ) ) ,
260
260
self . currentToken. tokenText [ 0 ..< periodIndex] . allSatisfy ( { Unicode . Scalar ( $0) . isDigit } )
@@ -264,33 +264,28 @@ extension Parser {
264
264
let major = self . consumePrefix ( SyntaxText ( rebasing: self . currentToken. tokenText [ 0 ..< periodIndex] ) , as: . integerLiteral)
265
265
266
266
var components : [ RawVersionComponentSyntax ] = [ ]
267
- var trailingComponents : [ RawVersionComponentSyntax ] = [ ]
268
267
269
- for i in 1 ... {
268
+ var loopProgress = LoopProgressCondition ( )
269
+ while self . hasProgressed ( & loopProgress) {
270
270
guard let period = self . consume ( if: . period) else {
271
271
break
272
272
}
273
273
let version = self . expectDecimalIntegerWithoutRecovery ( )
274
274
275
275
let versionComponent = RawVersionComponentSyntax ( period: period, number: version, arena: self . arena)
276
276
277
- if i < maxComponentCount {
278
- components. append ( versionComponent)
279
- } else {
280
- trailingComponents. append ( versionComponent)
281
- }
277
+ components. append ( versionComponent)
282
278
283
279
if version. isMissing {
284
280
break
285
281
}
286
282
}
287
283
288
- let unexpectedTrailingComponents = RawUnexpectedNodesSyntax ( trailingComponents, arena: self . arena)
289
284
let unexpectedAfterComponents = self . parseUnexpectedVersionTokens ( )
290
285
return RawVersionTupleSyntax (
291
286
major: major,
292
287
components: RawVersionComponentListSyntax ( elements: components, arena: self . arena) ,
293
- RawUnexpectedNodesSyntax ( combining : unexpectedTrailingComponents , unexpectedAfterComponents, arena : self . arena ) ,
288
+ unexpectedAfterComponents,
294
289
arena: self . arena
295
290
)
296
291
} else {
0 commit comments