@@ -638,48 +638,14 @@ 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 ( targetFunction, args) = self . parseDeclNameRef ( [ . zeroArgCompoundNames, . keywordsUsingSpecialNames, . operators] )
685
651
let declName = RawDeclNameSyntax (
@@ -691,7 +657,7 @@ extension Parser {
691
657
elements. append (
692
658
. specializeTargetFunctionArgument(
693
659
RawSpecializeTargetFunctionArgumentSyntax (
694
- targetLabel: ident ,
660
+ targetLabel: label ,
695
661
unexpectedBeforeColon,
696
662
colon: colon,
697
663
declName: declName,
@@ -701,14 +667,14 @@ extension Parser {
701
667
)
702
668
)
703
669
case ( . availability, let handle) ? :
704
- let ident = self . eat ( handle)
670
+ let label = self . eat ( handle)
705
671
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
706
672
let availability = self . parseAvailabilitySpecList ( )
707
673
let ( unexpectedBeforeSemi, semi) = self . expect ( . semicolon)
708
674
elements. append (
709
675
. specializeAvailabilityArgument(
710
676
RawSpecializeAvailabilityArgumentSyntax (
711
- availabilityLabel: ident ,
677
+ availabilityLabel: label ,
712
678
unexpectedBeforeColon,
713
679
colon: colon,
714
680
availabilityArguments: availability,
@@ -719,7 +685,7 @@ extension Parser {
719
685
)
720
686
)
721
687
case ( . available, let handle) ? :
722
- let ident = self . eat ( handle)
688
+ let label = self . eat ( handle)
723
689
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
724
690
// FIXME: I have no idea what this is supposed to be, but the Syntax
725
691
// tree only allows us to insert a token so we'll take anything.
@@ -728,7 +694,7 @@ extension Parser {
728
694
elements. append (
729
695
. labeledSpecializeArgument(
730
696
RawLabeledSpecializeArgumentSyntax (
731
- label: ident ,
697
+ label: label ,
732
698
unexpectedBeforeColon,
733
699
colon: colon,
734
700
value: available,
@@ -738,14 +704,14 @@ extension Parser {
738
704
)
739
705
)
740
706
case ( . exported, let handle) ? :
741
- let ident = self . eat ( handle)
707
+ let label = self . eat ( handle)
742
708
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
743
709
let ( unexpectedBeforeValue, value) = self . expect ( . keyword( . true ) , . keyword( . false ) , default: . keyword( . false ) )
744
710
let comma = self . consume ( if: . comma)
745
711
elements. append (
746
712
. labeledSpecializeArgument(
747
713
RawLabeledSpecializeArgumentSyntax (
748
- label: ident ,
714
+ label: label ,
749
715
unexpectedBeforeColon,
750
716
colon: colon,
751
717
unexpectedBeforeValue,
@@ -756,14 +722,14 @@ extension Parser {
756
722
)
757
723
)
758
724
case ( . kind, let handle) ? :
759
- let ident = self . eat ( handle)
725
+ let label = self . eat ( handle)
760
726
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
761
727
let valueLabel = self . parseAnyIdentifier ( )
762
728
let comma = self . consume ( if: . comma)
763
729
elements. append (
764
730
. labeledSpecializeArgument(
765
731
RawLabeledSpecializeArgumentSyntax (
766
- label: ident ,
732
+ label: label ,
767
733
unexpectedBeforeColon,
768
734
colon: colon,
769
735
value: valueLabel,
@@ -774,14 +740,14 @@ extension Parser {
774
740
)
775
741
case ( . spiModule, let handle) ? ,
776
742
( . spi, let handle) ? :
777
- let ident = self . eat ( handle)
743
+ let label = self . eat ( handle)
778
744
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
779
745
let valueLabel = self . consumeAnyToken ( )
780
746
let comma = self . consume ( if: . comma)
781
747
elements. append (
782
748
. labeledSpecializeArgument(
783
749
RawLabeledSpecializeArgumentSyntax (
784
- label: ident ,
750
+ label: label ,
785
751
unexpectedBeforeColon,
786
752
colon: colon,
787
753
value: valueLabel,
@@ -791,22 +757,7 @@ extension Parser {
791
757
)
792
758
)
793
759
case nil :
794
- let ident = self . consumeAnyToken ( )
795
- let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
796
- let valueLabel = self . consumeAnyToken ( )
797
- let comma = self . consume ( if: . comma)
798
- elements. append (
799
- . labeledSpecializeArgument(
800
- RawLabeledSpecializeArgumentSyntax (
801
- label: ident,
802
- unexpectedBeforeColon,
803
- colon: colon,
804
- value: valueLabel,
805
- trailingComma: comma,
806
- arena: self . arena
807
- )
808
- )
809
- )
760
+ break LOOP
810
761
}
811
762
}
812
763
0 commit comments