@@ -638,55 +638,21 @@ extension Parser {
638
638
}
639
639
640
640
extension Parser {
641
- enum SpecializeParameter : TokenSpecSet {
642
- case target
643
- case availability
644
- case exported
645
- case kind
646
- case spi
647
- case spiModule
648
- case available
649
-
650
- init ? ( lexeme: Lexer . Lexeme ) {
651
- switch PrepareForKeywordMatch ( lexeme) {
652
- case TokenSpec ( . target) : self = . target
653
- case TokenSpec ( . availability) : self = . availability
654
- case TokenSpec ( . exported) : self = . exported
655
- case TokenSpec ( . kind) : self = . kind
656
- case TokenSpec ( . spi) : self = . spi
657
- case TokenSpec ( . spiModule) : self = . spiModule
658
- case TokenSpec ( . available) : self = . available
659
- default : return nil
660
- }
661
- }
662
-
663
- var spec : TokenSpec {
664
- switch self {
665
- case . target: return . keyword( . target)
666
- case . availability: return . keyword( . availability)
667
- case . exported: return . keyword( . exported)
668
- case . kind: return . keyword( . kind)
669
- case . spi: return . keyword( . spi)
670
- case . spiModule: return . keyword( . spiModule)
671
- case . available: return . keyword( . available)
672
- }
673
- }
674
- }
675
641
mutating func parseSpecializeAttributeArgumentList( ) -> RawSpecializeAttributeArgumentListSyntax {
676
642
var elements = [ RawSpecializeAttributeArgumentListSyntax . Element] ( )
677
643
// Parse optional "exported" and "kind" labeled parameters.
678
644
var loopProgress = LoopProgressCondition ( )
679
- while !self . at ( . endOfFile, . rightParen, . keyword( . where) ) && self . hasProgressed ( & loopProgress) {
680
- switch self . at ( anyIn: SpecializeParameter . self) {
645
+ LOOP: while !self . at ( . endOfFile, . rightParen, . keyword( . where) ) && self . hasProgressed ( & loopProgress) {
646
+ switch self . at ( anyIn: LabeledSpecializeArgumentSyntax . LabelOptions . self) {
681
647
case ( . target, let handle) ? :
682
- let ident = self . eat ( handle)
648
+ let label = self . eat ( handle)
683
649
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
684
650
let declName = self . parseDeclReferenceExpr ( [ . zeroArgCompoundNames, . keywordsUsingSpecialNames, . operators] )
685
651
let comma = self . consume ( if: . comma)
686
652
elements. append (
687
653
. specializeTargetFunctionArgument(
688
654
RawSpecializeTargetFunctionArgumentSyntax (
689
- targetLabel: ident ,
655
+ targetLabel: label ,
690
656
unexpectedBeforeColon,
691
657
colon: colon,
692
658
declName: declName,
@@ -696,14 +662,14 @@ extension Parser {
696
662
)
697
663
)
698
664
case ( . availability, let handle) ? :
699
- let ident = self . eat ( handle)
665
+ let label = self . eat ( handle)
700
666
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
701
667
let availability = self . parseAvailabilitySpecList ( )
702
668
let ( unexpectedBeforeSemi, semi) = self . expect ( . semicolon)
703
669
elements. append (
704
670
. specializeAvailabilityArgument(
705
671
RawSpecializeAvailabilityArgumentSyntax (
706
- availabilityLabel: ident ,
672
+ availabilityLabel: label ,
707
673
unexpectedBeforeColon,
708
674
colon: colon,
709
675
availabilityArguments: availability,
@@ -714,7 +680,7 @@ extension Parser {
714
680
)
715
681
)
716
682
case ( . available, let handle) ? :
717
- let ident = self . eat ( handle)
683
+ let label = self . eat ( handle)
718
684
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
719
685
// FIXME: I have no idea what this is supposed to be, but the Syntax
720
686
// tree only allows us to insert a token so we'll take anything.
@@ -723,7 +689,7 @@ extension Parser {
723
689
elements. append (
724
690
. labeledSpecializeArgument(
725
691
RawLabeledSpecializeArgumentSyntax (
726
- label: ident ,
692
+ label: label ,
727
693
unexpectedBeforeColon,
728
694
colon: colon,
729
695
value: available,
@@ -733,14 +699,14 @@ extension Parser {
733
699
)
734
700
)
735
701
case ( . exported, let handle) ? :
736
- let ident = self . eat ( handle)
702
+ let label = self . eat ( handle)
737
703
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
738
704
let ( unexpectedBeforeValue, value) = self . expect ( . keyword( . true ) , . keyword( . false ) , default: . keyword( . false ) )
739
705
let comma = self . consume ( if: . comma)
740
706
elements. append (
741
707
. labeledSpecializeArgument(
742
708
RawLabeledSpecializeArgumentSyntax (
743
- label: ident ,
709
+ label: label ,
744
710
unexpectedBeforeColon,
745
711
colon: colon,
746
712
unexpectedBeforeValue,
@@ -751,14 +717,14 @@ extension Parser {
751
717
)
752
718
)
753
719
case ( . kind, let handle) ? :
754
- let ident = self . eat ( handle)
720
+ let label = self . eat ( handle)
755
721
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
756
722
let valueLabel = self . parseAnyIdentifier ( )
757
723
let comma = self . consume ( if: . comma)
758
724
elements. append (
759
725
. labeledSpecializeArgument(
760
726
RawLabeledSpecializeArgumentSyntax (
761
- label: ident ,
727
+ label: label ,
762
728
unexpectedBeforeColon,
763
729
colon: colon,
764
730
value: valueLabel,
@@ -769,14 +735,14 @@ extension Parser {
769
735
)
770
736
case ( . spiModule, let handle) ? ,
771
737
( . spi, let handle) ? :
772
- let ident = self . eat ( handle)
738
+ let label = self . eat ( handle)
773
739
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
774
740
let valueLabel = self . consumeAnyToken ( )
775
741
let comma = self . consume ( if: . comma)
776
742
elements. append (
777
743
. labeledSpecializeArgument(
778
744
RawLabeledSpecializeArgumentSyntax (
779
- label: ident ,
745
+ label: label ,
780
746
unexpectedBeforeColon,
781
747
colon: colon,
782
748
value: valueLabel,
@@ -786,22 +752,7 @@ extension Parser {
786
752
)
787
753
)
788
754
case nil :
789
- let ident = self . consumeAnyToken ( )
790
- let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
791
- let valueLabel = self . consumeAnyToken ( )
792
- let comma = self . consume ( if: . comma)
793
- elements. append (
794
- . labeledSpecializeArgument(
795
- RawLabeledSpecializeArgumentSyntax (
796
- label: ident,
797
- unexpectedBeforeColon,
798
- colon: colon,
799
- value: valueLabel,
800
- trailingComma: comma,
801
- arena: self . arena
802
- )
803
- )
804
- )
755
+ break LOOP
805
756
}
806
757
}
807
758
0 commit comments