@@ -266,8 +266,8 @@ extension Parser {
266
266
repeat {
267
267
let attributes = self . parseAttributeList ( )
268
268
269
- let name = self . expectIdentifierWithoutRecovery ( )
270
- if name. isMissing && elements. isEmpty {
269
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
270
+ if unexpectedBeforeName == nil && name. isMissing && elements. isEmpty {
271
271
break
272
272
}
273
273
@@ -530,13 +530,14 @@ extension Parser {
530
530
@_spi ( RawSyntax)
531
531
public mutating func parseClassDeclaration( _ attrs: DeclAttributes ) -> RawClassDeclSyntax {
532
532
let ( unexpectedBeforeClassKeyword, classKeyword) = self . expect ( . classKeyword)
533
- let name = self . expectIdentifierWithoutRecovery ( )
534
- if name. isMissing {
533
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
534
+ if unexpectedBeforeName == nil && name. isMissing {
535
535
return RawClassDeclSyntax (
536
536
attributes: attrs. attributes,
537
537
modifiers: attrs. modifiers,
538
538
unexpectedBeforeClassKeyword,
539
539
classKeyword: classKeyword,
540
+ unexpectedBeforeName,
540
541
identifier: name,
541
542
genericParameterClause: nil ,
542
543
inheritanceClause: nil ,
@@ -577,6 +578,7 @@ extension Parser {
577
578
attributes: attrs. attributes,
578
579
modifiers: attrs. modifiers,
579
580
classKeyword: classKeyword,
581
+ unexpectedBeforeName,
580
582
identifier: name,
581
583
genericParameterClause: generics,
582
584
inheritanceClause: inheritance,
@@ -646,13 +648,14 @@ extension Parser {
646
648
@_spi ( RawSyntax)
647
649
public mutating func parseEnumDeclaration( _ attrs: DeclAttributes ) -> RawEnumDeclSyntax {
648
650
let ( unexpectedBeforeEnumKeyword, enumKeyword) = self . expect ( . enumKeyword)
649
- let name = self . expectIdentifierWithoutRecovery ( )
650
- if name. isMissing {
651
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
652
+ if unexpectedBeforeName == nil , name. isMissing {
651
653
return RawEnumDeclSyntax (
652
654
attributes: attrs. attributes,
653
655
modifiers: attrs. modifiers,
654
656
unexpectedBeforeEnumKeyword,
655
657
enumKeyword: enumKeyword,
658
+ unexpectedBeforeName,
656
659
identifier: name,
657
660
genericParameters: nil ,
658
661
inheritanceClause: nil ,
@@ -692,6 +695,7 @@ extension Parser {
692
695
return RawEnumDeclSyntax (
693
696
attributes: attrs. attributes, modifiers: attrs. modifiers,
694
697
enumKeyword: enumKeyword,
698
+ unexpectedBeforeName,
695
699
identifier: name,
696
700
genericParameters: generics,
697
701
inheritanceClause: inheritance,
@@ -722,7 +726,7 @@ extension Parser {
722
726
var keepGoing : RawTokenSyntax ? = nil
723
727
var loopProgress = LoopProgressCondition ( )
724
728
repeat {
725
- let name = self . expectIdentifierWithoutRecovery ( )
729
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
726
730
727
731
let associatedValue : RawParameterClauseSyntax ?
728
732
if self . at ( . leftParen, where: { !$0. isAtStartOfLine } ) {
@@ -747,6 +751,7 @@ extension Parser {
747
751
// Continue through the comma-separated list.
748
752
keepGoing = self . consume ( if: . comma)
749
753
elements. append ( RawEnumCaseElementSyntax (
754
+ unexpectedBeforeName,
750
755
identifier: name,
751
756
associatedValue: associatedValue,
752
757
rawValue: rawValue,
@@ -781,8 +786,8 @@ extension Parser {
781
786
@_spi ( RawSyntax)
782
787
public mutating func parseStructDeclaration( _ attrs: DeclAttributes ) -> RawStructDeclSyntax {
783
788
let ( unexpectedBeforeStructKeyword, structKeyword) = self . expect ( . structKeyword)
784
- let name = self . expectIdentifierWithoutRecovery ( )
785
- if name. isMissing {
789
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
790
+ if unexpectedBeforeName == nil && name. isMissing {
786
791
return RawStructDeclSyntax (
787
792
attributes: attrs. attributes,
788
793
modifiers: attrs. modifiers,
@@ -846,9 +851,10 @@ extension Parser {
846
851
var loopProgress = LoopProgressCondition ( )
847
852
repeat {
848
853
// Parse the name of the parameter.
849
- let name = self . expectIdentifierWithoutRecovery ( )
854
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
850
855
keepGoing = self . consume ( if: . comma)
851
856
associatedTypes. append ( RawPrimaryAssociatedTypeSyntax (
857
+ unexpectedBeforeName,
852
858
name: name,
853
859
trailingComma: keepGoing,
854
860
arena: self . arena) )
@@ -884,8 +890,8 @@ extension Parser {
884
890
@_spi ( RawSyntax)
885
891
public mutating func parseProtocolDeclaration( _ attrs: DeclAttributes ) -> RawProtocolDeclSyntax {
886
892
let ( unexpectedBeforeProtocolKeyword, protocolKeyword) = self . expect ( . protocolKeyword)
887
- let name = self . expectIdentifierWithoutRecovery ( )
888
- if name. isMissing {
893
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
894
+ if unexpectedBeforeName == nil && name. isMissing {
889
895
return RawProtocolDeclSyntax (
890
896
attributes: attrs. attributes,
891
897
modifiers: attrs. modifiers,
@@ -952,8 +958,8 @@ extension Parser {
952
958
@_spi ( RawSyntax)
953
959
public mutating func parseAssociatedTypeDeclaration( _ attrs: DeclAttributes ) -> RawAssociatedtypeDeclSyntax {
954
960
let ( unexpectedBeforeAssocKeyword, assocKeyword) = self . expect ( . associatedtypeKeyword)
955
- let name = self . expectIdentifierWithoutRecovery ( )
956
- if name. isMissing {
961
+ let ( unexpecedBeforeName , name) = self . expectIdentifier ( )
962
+ if unexpecedBeforeName == nil && name. isMissing {
957
963
return RawAssociatedtypeDeclSyntax (
958
964
attributes: attrs. attributes,
959
965
modifiers: attrs. modifiers,
@@ -1020,7 +1026,7 @@ extension Parser {
1020
1026
@_spi ( RawSyntax)
1021
1027
public mutating func parseActorDeclaration( _ attrs: DeclAttributes ) -> RawActorDeclSyntax {
1022
1028
let ( unexpectedBeforeActorKeyword, actorKeyword) = self . expectContextualKeyword ( " actor " , precedence: . declKeyword)
1023
- let name = self . expectIdentifierWithoutRecovery ( )
1029
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
1024
1030
1025
1031
let generics : RawGenericParameterClauseSyntax ?
1026
1032
if self . currentToken. starts ( with: " < " ) {
@@ -1051,6 +1057,7 @@ extension Parser {
1051
1057
modifiers: attrs. modifiers,
1052
1058
unexpectedBeforeActorKeyword,
1053
1059
actorKeyword: actorKeyword,
1060
+ unexpectedBeforeName,
1054
1061
identifier: name,
1055
1062
genericParameterClause: generics,
1056
1063
inheritanceClause: inheritance,
@@ -1271,15 +1278,17 @@ extension Parser {
1271
1278
@_spi ( RawSyntax)
1272
1279
public mutating func parseFuncDeclaration( _ attrs: DeclAttributes ) -> RawFunctionDeclSyntax {
1273
1280
let ( unexpectedBeforeFuncKeyword, funcKeyword) = self . expect ( . funcKeyword)
1281
+ let unexpectedBeforeIdentifier : RawUnexpectedNodesSyntax ?
1274
1282
let identifier : RawTokenSyntax
1275
1283
if self . at ( anyIn: Operator . self) != nil || self . at ( any: [ . exclamationMark, . prefixAmpersand] ) {
1276
1284
var name = self . currentToken. tokenText
1277
1285
if name. count > 1 && name. hasSuffix ( " < " ) && self . peek ( ) . tokenKind == . identifier {
1278
1286
name = SyntaxText ( rebasing: name. dropLast ( ) )
1279
1287
}
1288
+ unexpectedBeforeIdentifier = nil
1280
1289
identifier = self . consumePrefix ( name, as: . spacedBinaryOperator)
1281
1290
} else {
1282
- identifier = self . expectIdentifierWithoutRecovery ( )
1291
+ ( unexpectedBeforeIdentifier , identifier) = self . expectIdentifier ( )
1283
1292
}
1284
1293
1285
1294
let genericParams : RawGenericParameterClauseSyntax ?
@@ -1304,6 +1313,7 @@ extension Parser {
1304
1313
modifiers: attrs. modifiers,
1305
1314
unexpectedBeforeFuncKeyword,
1306
1315
funcKeyword: funcKeyword,
1316
+ unexpectedBeforeIdentifier,
1307
1317
identifier: identifier,
1308
1318
genericParameterClause: genericParams,
1309
1319
signature: signature,
@@ -1615,10 +1625,11 @@ extension Parser {
1615
1625
// set-name ::= '(' identifier ')'
1616
1626
let parameter : RawAccessorParameterSyntax ?
1617
1627
if [ AccessorKind . set, . willSet, . didSet ] . contains ( kind) , let lparen = self . consume ( if: . leftParen) {
1618
- let name = self . expectIdentifierWithoutRecovery ( )
1628
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
1619
1629
let ( unexpectedBeforeRParen, rparen) = self . expect ( . rightParen)
1620
1630
parameter = RawAccessorParameterSyntax (
1621
1631
leftParen: lparen,
1632
+ unexpectedBeforeName,
1622
1633
name: name,
1623
1634
unexpectedBeforeRParen,
1624
1635
rightParen: rparen,
@@ -1677,7 +1688,7 @@ extension Parser {
1677
1688
@_spi ( RawSyntax)
1678
1689
public mutating func parseTypealiasDeclaration( _ attrs: DeclAttributes ) -> RawTypealiasDeclSyntax {
1679
1690
let ( unexpectedBeforeTypealiasKeyword, typealiasKeyword) = self . expect ( . typealiasKeyword)
1680
- let name = self . expectIdentifierWithoutRecovery ( )
1691
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
1681
1692
1682
1693
// Parse a generic parameter list if it is present.
1683
1694
let generics : RawGenericParameterClauseSyntax ?
@@ -1710,6 +1721,7 @@ extension Parser {
1710
1721
modifiers: attrs. modifiers,
1711
1722
unexpectedBeforeTypealiasKeyword,
1712
1723
typealiasKeyword: typealiasKeyword,
1724
+ unexpectedBeforeName,
1713
1725
identifier: name,
1714
1726
genericParameterClause: generics,
1715
1727
initializer: initializer,
@@ -1785,7 +1797,7 @@ extension Parser {
1785
1797
@_spi ( RawSyntax)
1786
1798
public mutating func parsePrecedenceGroupDeclaration( _ attrs: DeclAttributes ) -> RawPrecedenceGroupDeclSyntax {
1787
1799
let ( unexpectedBeforeGroup, group) = self . expect ( . precedencegroupKeyword)
1788
- let identifier = self . expectIdentifierWithoutRecovery ( )
1800
+ let ( unexpectedBeforeIdentifier , identifier) = self . expectIdentifier ( )
1789
1801
let ( unexpectedBeforeLBrace, lbrace) = self . expect ( . leftBrace)
1790
1802
var elements = [ RawSyntax] ( )
1791
1803
@@ -1803,11 +1815,12 @@ extension Parser {
1803
1815
case ( . associativity, let handle) ? :
1804
1816
let associativity = self . eat ( handle)
1805
1817
let ( unexpectedBeforeColon, colon) = self . expect ( . colon)
1806
- let value = self . expectIdentifierWithoutRecovery ( )
1818
+ let ( unexpectedBeforeValue , value) = self . expectIdentifier ( )
1807
1819
elements. append ( RawSyntax ( RawPrecedenceGroupAssociativitySyntax (
1808
1820
associativityKeyword: associativity,
1809
1821
unexpectedBeforeColon,
1810
1822
colon: colon,
1823
+ unexpectedBeforeValue,
1811
1824
value: value,
1812
1825
arena: self . arena
1813
1826
) ) )
@@ -1833,11 +1846,14 @@ extension Parser {
1833
1846
var keepGoing : RawTokenSyntax ? = nil
1834
1847
var namesProgress = LoopProgressCondition ( )
1835
1848
repeat {
1836
- let name = self . expectIdentifierWithoutRecovery ( )
1849
+ let ( unexpectedBeforeName , name) = self . expectIdentifier ( )
1837
1850
keepGoing = self . consume ( if: . comma)
1838
1851
names. append ( RawPrecedenceGroupNameElementSyntax (
1839
- name: name, trailingComma: keepGoing,
1840
- arena: self . arena) )
1852
+ unexpectedBeforeName,
1853
+ name: name,
1854
+ trailingComma: keepGoing,
1855
+ arena: self . arena
1856
+ ) )
1841
1857
} while keepGoing != nil && namesProgress. evaluate ( currentToken)
1842
1858
}
1843
1859
elements. append ( RawSyntax ( RawPrecedenceGroupRelationSyntax (
@@ -1856,6 +1872,7 @@ extension Parser {
1856
1872
attributes: attrs. attributes, modifiers: attrs. modifiers,
1857
1873
unexpectedBeforeGroup,
1858
1874
precedencegroupKeyword: group,
1875
+ unexpectedBeforeIdentifier,
1859
1876
identifier: identifier,
1860
1877
unexpectedBeforeLBrace,
1861
1878
leftBrace: lbrace,
0 commit comments