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