File tree Expand file tree Collapse file tree 4 files changed +41
-2
lines changed Expand file tree Collapse file tree 4 files changed +41
-2
lines changed Original file line number Diff line number Diff line change @@ -1907,10 +1907,11 @@ extension Parser {
1907
1907
let ( unexpectedBeforeIdentifier, identifier) = self . expectIdentifier ( )
1908
1908
var types = [ RawDesignatedTypeElementSyntax] ( )
1909
1909
while let comma = self . consume ( if: . comma) {
1910
- let ( unexpectedBeforeDesignatedType, designatedType) = self . expectIdentifier ( )
1910
+ // FIXME: The compiler accepts... anything here. This is a bug.
1911
+ // let (unexpectedBeforeDesignatedType, designatedType) = self.expectIdentifier()
1912
+ let designatedType = self . consumeAnyToken ( )
1911
1913
types. append ( RawDesignatedTypeElementSyntax (
1912
1914
leadingComma: comma,
1913
- unexpectedBeforeDesignatedType,
1914
1915
name: designatedType,
1915
1916
arena: self . arena) )
1916
1917
}
Original file line number Diff line number Diff line change @@ -33,6 +33,21 @@ extension Parser {
33
33
/// type → '(' type ')'
34
34
@_spi ( RawSyntax)
35
35
public mutating func parseType( ) -> RawTypeSyntax {
36
+ let type = self . parseTypeScalar ( )
37
+
38
+ // Parse pack expansion 'T...'.
39
+ if self . currentToken. isEllipsis {
40
+ let ellipsis = self . consumeAnyToken ( remapping: . ellipsis)
41
+ return RawTypeSyntax (
42
+ RawPackExpansionTypeSyntax (
43
+ patternType: type,
44
+ ellipsis: ellipsis,
45
+ arena: self . arena) )
46
+ }
47
+ return type
48
+ }
49
+
50
+ mutating func parseTypeScalar( ) -> RawTypeSyntax {
36
51
let ( specifier, attrList) = self . parseTypeAttributeList ( )
37
52
var base = RawTypeSyntax ( self . parseSimpleOrCompositionType ( ) )
38
53
if self . lookahead ( ) . isAtFunctionTypeArrow ( ) {
Original file line number Diff line number Diff line change @@ -357,6 +357,7 @@ final class DeclarationTests: XCTestCase {
357
357
358
358
AssertParse (
359
359
"""
360
+ infix operator <*<<< : MediumPrecedence, &
360
361
prefix operator ^^ : PrefixMagicOperatorProtocol
361
362
infix operator <*< : MediumPrecedence, InfixMagicOperatorProtocol
362
363
postfix operator ^^ : PostfixMagicOperatorProtocol
Original file line number Diff line number Diff line change @@ -156,5 +156,27 @@ final class TypeTests: XCTestCase {
156
156
}
157
157
""" )
158
158
}
159
+
160
+ func testPackExpansion( ) throws {
161
+ AssertParse (
162
+ """
163
+ func f1<@_typeSequence T>() -> T... {}
164
+ func f2<@_typeSequence T>() -> (T...) {}
165
+ func f3<@_typeSequence T>() -> G<T... > {}
166
+ """ )
167
+
168
+ AssertParse (
169
+ """
170
+ enum E<@_typeSequence T> {
171
+ case f1(_: T...)
172
+ case f2(_: G<T... >)
173
+ var x: T... { fatalError() }
174
+ var x: (T...) { fatalError() }
175
+ subscript(_: T...) -> Int { fatalError() }
176
+ subscript() -> T... { fatalError() }
177
+ subscript() -> (T...) { fatalError() }
178
+ }
179
+ """ )
180
+ }
159
181
}
160
182
You can’t perform that action at this time.
0 commit comments