@@ -638,48 +638,14 @@ extension Parser {
638638}
639639
640640extension 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- }
675641 mutating func parseSpecializeAttributeArgumentList( ) -> RawSpecializeAttributeArgumentListSyntax {
676642 var elements = [ RawSpecializeAttributeArgumentListSyntax . Element] ( )
677643 // Parse optional "exported" and "kind" labeled parameters.
678644 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) {
681647 case ( . target, let handle) ? :
682- let ident = self . eat ( handle)
648+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
683649 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
684650 let ( targetFunction, args) = self . parseDeclNameRef ( [ . zeroArgCompoundNames, . keywordsUsingSpecialNames, . operators] )
685651 let declName = RawDeclNameSyntax (
@@ -691,7 +657,8 @@ extension Parser {
691657 elements. append (
692658 . specializeTargetFunctionArgument(
693659 RawSpecializeTargetFunctionArgumentSyntax (
694- targetLabel: ident,
660+ unexpectedBeforeLabel,
661+ targetLabel: label,
695662 unexpectedBeforeColon,
696663 colon: colon,
697664 declName: declName,
@@ -701,14 +668,15 @@ extension Parser {
701668 )
702669 )
703670 case ( . availability, let handle) ? :
704- let ident = self . eat ( handle)
671+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
705672 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
706673 let availability = self . parseAvailabilitySpecList ( )
707674 let ( unexpectedBeforeSemi, semi) = self . expect ( . semicolon)
708675 elements. append (
709- . specializeAvailabilityArgument(
710- RawSpecializeAvailabilityArgumentSyntax (
711- availabilityLabel: ident,
676+ . RawSpecializeAvailabilityArgumentSyntax(
677+ RawAvailabilityEntrySyntax (
678+ unexpectedBeforeLabel,
679+ availabilityLabel: label,
712680 unexpectedBeforeColon,
713681 colon: colon,
714682 availabilityArguments: availability,
@@ -719,7 +687,7 @@ extension Parser {
719687 )
720688 )
721689 case ( . available, let handle) ? :
722- let ident = self . eat ( handle)
690+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
723691 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
724692 // FIXME: I have no idea what this is supposed to be, but the Syntax
725693 // tree only allows us to insert a token so we'll take anything.
@@ -728,7 +696,8 @@ extension Parser {
728696 elements. append (
729697 . labeledSpecializeArgument(
730698 RawLabeledSpecializeArgumentSyntax (
731- label: ident,
699+ unexpectedBeforeLabel,
700+ label: label,
732701 unexpectedBeforeColon,
733702 colon: colon,
734703 value: available,
@@ -738,14 +707,15 @@ extension Parser {
738707 )
739708 )
740709 case ( . exported, let handle) ? :
741- let ident = self . eat ( handle)
710+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
742711 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
743712 let ( unexpectedBeforeValue, value) = self . expect ( . keyword( . true ) , . keyword( . false ) , default: . keyword( . false ) )
744713 let comma = self . consume ( if: . comma)
745714 elements. append (
746715 . labeledSpecializeArgument(
747716 RawLabeledSpecializeArgumentSyntax (
748- label: ident,
717+ unexpectedBeforeLabel,
718+ label: label,
749719 unexpectedBeforeColon,
750720 colon: colon,
751721 unexpectedBeforeValue,
@@ -756,14 +726,15 @@ extension Parser {
756726 )
757727 )
758728 case ( . kind, let handle) ? :
759- let ident = self . eat ( handle)
729+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
760730 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
761731 let valueLabel = self . parseAnyIdentifier ( )
762732 let comma = self . consume ( if: . comma)
763733 elements. append (
764734 . labeledSpecializeArgument(
765735 RawLabeledSpecializeArgumentSyntax (
766- label: ident,
736+ unexpectedBeforeLabel,
737+ label: label,
767738 unexpectedBeforeColon,
768739 colon: colon,
769740 value: valueLabel,
@@ -774,14 +745,15 @@ extension Parser {
774745 )
775746 case ( . spiModule, let handle) ? ,
776747 ( . spi, let handle) ? :
777- let ident = self . eat ( handle)
748+ let ( unexpectedBeforeLabel , label ) = self . eat ( handle)
778749 let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
779750 let valueLabel = self . consumeAnyToken ( )
780751 let comma = self . consume ( if: . comma)
781752 elements. append (
782753 . labeledSpecializeArgument(
783754 RawLabeledSpecializeArgumentSyntax (
784- label: ident,
755+ unexpectedBeforeLabel,
756+ label: label,
785757 unexpectedBeforeColon,
786758 colon: colon,
787759 value: valueLabel,
@@ -791,22 +763,7 @@ extension Parser {
791763 )
792764 )
793765 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
810767 }
811768 }
812769
0 commit comments