@@ -417,54 +417,6 @@ extension RawAccessorEffectSpecifiersSyntax: RawEffectSpecifiersTrait {
417
417
}
418
418
}
419
419
420
- extension RawDeinitEffectSpecifiersSyntax {
421
- enum MisspelledAsyncTokenKinds : TokenSpecSet {
422
- case await
423
- case reasync
424
-
425
- init ? ( lexeme: Lexer . Lexeme ) {
426
- switch PrepareForKeywordMatch ( lexeme) {
427
- case TokenSpec ( . await , allowAtStartOfLine: false ) : self = . await
428
- case TokenSpec( . reasync) : self = . reasync
429
- default : return nil
430
- }
431
- }
432
-
433
- var spec : TokenSpec {
434
- switch self {
435
- case . await : return TokenSpec ( . await , allowAtStartOfLine: false )
436
- case . reasync: return . keyword( . reasync)
437
- }
438
- }
439
- }
440
-
441
- enum MisspelledThrowsTokenKinds : TokenSpecSet {
442
- case `rethrows`
443
- case `throw`
444
- case `throws`
445
- case `try`
446
-
447
- init ? ( lexeme: Lexer . Lexeme ) {
448
- switch PrepareForKeywordMatch ( lexeme) {
449
- case TokenSpec ( . rethrows) : self = . rethrows
450
- case TokenSpec ( . throw, allowAtStartOfLine: false ) : self = . throw
451
- case TokenSpec ( . throws) : self = . throws
452
- case TokenSpec ( . try , allowAtStartOfLine: false ) : self = . try
453
- default: return nil
454
- }
455
- }
456
-
457
- var spec : TokenSpec {
458
- switch self {
459
- case . rethrows: return . keyword( . rethrows)
460
- case . throw: return TokenSpec ( . throw, allowAtStartOfLine: false )
461
- case . throws: return . keyword( . throws)
462
- case . try : return TokenSpec ( . try , allowAtStartOfLine: false )
463
- }
464
- }
465
- }
466
- }
467
-
468
420
extension TokenConsumer {
469
421
mutating func at< SpecSet1: TokenSpecSet , SpecSet2: TokenSpecSet > (
470
422
anyIn specSet1: SpecSet1 . Type ,
@@ -576,45 +528,32 @@ extension Parser {
576
528
var unexpectedBeforeAsync : [ RawSyntax ? ] = [ ]
577
529
var asyncKeyword : RawTokenSyntax ?
578
530
var unexpectedAfterAsync : [ RawSyntax ? ] = [ ]
579
-
580
- while true {
581
- var progressed : Bool = false
582
-
583
- if let realAsync = self . consume ( if: . keyword( . async) ) {
584
- progressed = true
585
- if asyncKeyword? . isMissing ?? true {
586
- asyncKeyword = realAsync
587
- } else {
588
- unexpectedAfterAsync. append ( realAsync. raw)
589
- }
590
- }
591
-
592
- while let badAsync = self . consume ( ifAnyIn: RawDeinitEffectSpecifiersSyntax . MisspelledAsyncTokenKinds. self) {
593
- progressed = true
594
- if asyncKeyword? . isMissing ?? true {
595
- unexpectedBeforeAsync. append ( badAsync. raw)
531
+
532
+ while let ( specifier, handle) = self . at ( anyIn: EffectSpecifiers . self) {
533
+ let beforeAsync = asyncKeyword? . isMissing ?? true
534
+ switch specifier {
535
+ case . async :
536
+ if beforeAsync {
537
+ asyncKeyword = self . eat ( handle)
596
538
} else {
597
- unexpectedAfterAsync. append ( badAsync . raw )
539
+ unexpectedAfterAsync. append ( RawSyntax ( self . eat ( handle ) ) )
598
540
}
599
- if asyncKeyword == nil {
541
+ case . await , . reasync:
542
+ if beforeAsync {
600
543
// Let's synthesize a missing 'async'. If we find a real async specifier
601
544
// later, we will replace the missing token by the present token.
602
- asyncKeyword = missingToken ( . keyword ( . async) )
545
+ asyncKeyword = missingToken ( . async)
603
546
}
604
- }
605
-
606
- while let badThrows = self . consume ( ifAnyIn: RawDeinitEffectSpecifiersSyntax . MisspelledThrowsTokenKinds. self) {
607
- progressed = true
608
- if asyncKeyword? . isMissing ?? true {
609
- unexpectedBeforeAsync. append ( badThrows. raw)
547
+ fallthrough
548
+ default :
549
+ if beforeAsync {
550
+ unexpectedBeforeAsync. append ( RawSyntax ( self . eat ( handle) ) )
610
551
} else {
611
- unexpectedAfterAsync. append ( badThrows . raw )
552
+ unexpectedAfterAsync. append ( RawSyntax ( self . eat ( handle ) ) )
612
553
}
613
554
}
614
-
615
- if !progressed { break }
616
555
}
617
-
556
+
618
557
if unexpectedBeforeAsync. isEmpty && asyncKeyword == nil && unexpectedAfterAsync. isEmpty {
619
558
return nil
620
559
}
0 commit comments