Skip to content

Commit 841c0ec

Browse files
committed
Revert "Merge pull request #1167 from hborla/pack-expansion-syntax"
This reverts commit d856f48, reversing changes made to f5f45e2. This PR requires non-trivial changes in apple/swift that we don’t want to cherry-pick to release/5.8.
1 parent 6fda55d commit 841c0ec

File tree

24 files changed

+407
-938
lines changed

24 files changed

+407
-938
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/ExprNodes.swift

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -226,22 +226,6 @@ public let EXPR_NODES: [Node] = [
226226
])
227227
]),
228228

229-
Node(name: "PackExpansionExpr",
230-
nameForDiagnostics: nil,
231-
kind: "Expr",
232-
children: [
233-
Child(name: "RepeatKeyword",
234-
kind: "KeywordToken",
235-
tokenChoices: [
236-
"Keyword"
237-
],
238-
textChoices: [
239-
"repeat"
240-
]),
241-
Child(name: "PatternExpr",
242-
kind: "Expr")
243-
]),
244-
245229
Node(name: "PackElementExpr",
246230
nameForDiagnostics: nil,
247231
kind: "Expr",

CodeGeneration/Sources/SyntaxSupport/gyb_generated/TypeNodes.swift

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,16 +207,13 @@ public let TYPE_NODES: [Node] = [
207207
nameForDiagnostics: "variadic expansion",
208208
kind: "Type",
209209
children: [
210-
Child(name: "RepeatKeyword",
211-
kind: "KeywordToken",
212-
tokenChoices: [
213-
"Keyword"
214-
],
215-
textChoices: [
216-
"repeat"
217-
]),
218210
Child(name: "PatternType",
219-
kind: "Type")
211+
kind: "Type"),
212+
Child(name: "Ellipsis",
213+
kind: "EllipsisToken",
214+
tokenChoices: [
215+
"Ellipsis"
216+
])
220217
]),
221218

222219
Node(name: "PackReferenceType",

Sources/SwiftParser/Expressions.swift

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,6 @@ extension TokenConsumer {
3838
return true
3939
}
4040
}
41-
42-
// 'repeat' is the start of a pack expansion expression.
43-
if (self.at(.keyword(.repeat))) {
44-
// FIXME: 'repeat' followed by '{' could still be a pack
45-
// expansion, but we need to do more lookahead to figure out
46-
// whether the '{' is the start of a closure expression or a
47-
// brace statement for 'repeat { ... } while'
48-
let backtrack = self.lookahead()
49-
return backtrack.peek().rawTokenKind != .leftBrace
50-
}
51-
5241
return false
5342
}
5443
}
@@ -476,14 +465,6 @@ extension Parser {
476465
) -> RawExprSyntax {
477466
// First check to see if we have the start of a regex literal `/.../`.
478467
// tryLexRegexLiteral(/*forUnappliedOperator*/ false)
479-
480-
// 'repeat' is the start of a pack expansion expression.
481-
if (self.at(.keyword(.repeat))) {
482-
return RawExprSyntax(
483-
parsePackExpansionExpr(flavor, pattern: pattern)
484-
)
485-
}
486-
487468
switch self.at(anyIn: ExpressionPrefixOperator.self) {
488469
case (.prefixAmpersand, let handle)?:
489470
let amp = self.eat(handle)
@@ -1156,7 +1137,7 @@ extension Parser {
11561137
}
11571138

11581139
if let each = self.consume(if: .keyword(.each)) {
1159-
let packRef = self.parseSequenceExpressionElement(flavor, pattern: pattern)
1140+
let packRef = self.parseExpression()
11601141
return RawExprSyntax(
11611142
RawPackElementExprSyntax(
11621143
eachKeyword: each,
@@ -1342,31 +1323,6 @@ extension Parser {
13421323
}
13431324
}
13441325

1345-
extension Parser {
1346-
/// Parse a pack expansion as an expression.
1347-
///
1348-
///
1349-
/// Grammar
1350-
/// =======
1351-
///
1352-
/// pack-expansion-expression → 'repeat' pattern-expression
1353-
/// pattern-expression → expression
1354-
@_spi(RawSyntax)
1355-
public mutating func parsePackExpansionExpr(
1356-
_ flavor: ExprFlavor,
1357-
pattern: PatternContext
1358-
) -> RawPackExpansionExprSyntax {
1359-
let repeatKeyword = self.consumeAnyToken()
1360-
let patternExpr = self.parseExpression(flavor, pattern: pattern)
1361-
1362-
return RawPackExpansionExprSyntax(
1363-
repeatKeyword: repeatKeyword,
1364-
patternExpr: patternExpr,
1365-
arena: self.arena
1366-
)
1367-
}
1368-
}
1369-
13701326
extension Parser {
13711327
/// Parse a regular expression literal.
13721328
///

Sources/SwiftParser/Patterns.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ extension Parser.Lookahead {
373373
// If the next token can be an argument label, we might have a name.
374374
if nextTok.canBeArgumentLabel(allowDollarIdentifier: true) {
375375
// If the first name wasn't "isolated", we're done.
376-
if !self.at(.keyword(.isolated)) && !self.at(.keyword(.some)) && !self.at(.keyword(.any)) && !self.at(.keyword(.each)) && !self.at(.keyword(.repeat)) {
376+
if !self.at(.keyword(.isolated)) && !self.at(.keyword(.some)) && !self.at(.keyword(.any)) && !self.at(.keyword(.each)) {
377377
return true
378378
}
379379

Sources/SwiftParser/Statements.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,19 +1238,14 @@ extension Parser.Lookahead {
12381238
.guardKeyword?,
12391239
.whileKeyword?,
12401240
.doKeyword?,
1241+
.repeatKeyword?,
12411242
.forKeyword?,
12421243
.breakKeyword?,
12431244
.continueKeyword?,
12441245
.fallthroughKeyword?,
12451246
.switchKeyword?,
12461247
.poundAssertKeyword?:
12471248
return true
1248-
case .repeatKeyword?:
1249-
// 'repeat' followed by anything other than a brace stmt
1250-
// is a pack expansion expression.
1251-
// FIXME: 'repeat' followed by '{' could be a pack expansion
1252-
// with a closure pattern.
1253-
return self.peek().rawTokenKind == .leftBrace
12541249
case .yield?:
12551250
switch self.peek().rawTokenKind {
12561251
case .prefixAmpersand:

Sources/SwiftParser/Types.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,20 @@ extension Parser {
2525
/// type → opaque-type
2626
@_spi(RawSyntax)
2727
public mutating func parseType(misplacedSpecifiers: [RawTokenSyntax] = []) -> RawTypeSyntax {
28-
// Parse pack expansion 'repeat T'.
29-
if let repeatKeyword = self.consume(if: .keyword(.repeat)) {
30-
let type = self.parseTypeScalar(misplacedSpecifiers: misplacedSpecifiers)
28+
let type = self.parseTypeScalar(misplacedSpecifiers: misplacedSpecifiers)
29+
30+
// Parse pack expansion 'T...'.
31+
if self.currentToken.isEllipsis {
32+
let ellipsis = self.consumeAnyToken(remapping: .ellipsis)
3133
return RawTypeSyntax(
3234
RawPackExpansionTypeSyntax(
33-
repeatKeyword: repeatKeyword,
3435
patternType: type,
36+
ellipsis: ellipsis,
3537
arena: self.arena
3638
)
3739
)
3840
}
39-
40-
return self.parseTypeScalar(misplacedSpecifiers: misplacedSpecifiers)
41+
return type
4142
}
4243

4344
mutating func parseTypeScalar(misplacedSpecifiers: [RawTokenSyntax] = []) -> RawTypeSyntax {
@@ -671,9 +672,6 @@ extension Parser.Lookahead {
671672
}
672673

673674
mutating func canParseTypeScalar() -> Bool {
674-
// 'repeat' starts a pack expansion type
675-
self.consume(if: .keyword(.repeat))
676-
677675
self.skipTypeAttributeList()
678676

679677
guard self.canParseSimpleOrCompositionType() else {
@@ -699,7 +697,11 @@ extension Parser.Lookahead {
699697
}
700698

701699
mutating func canParseSimpleOrCompositionType() -> Bool {
702-
if self.at(.keyword(.some)) || self.at(.keyword(.any)) || self.at(.keyword(.each)) {
700+
if self.at(.keyword(.each)) {
701+
return self.canParseSimpleType();
702+
}
703+
704+
if self.at(.keyword(.some)) || self.at(.keyword(.any)) {
703705
self.consumeAnyToken()
704706
}
705707

@@ -746,8 +748,6 @@ extension Parser.Lookahead {
746748
}
747749
case .wildcard:
748750
self.consumeAnyToken()
749-
case .keyword(.repeat):
750-
return true
751751
default:
752752
return false
753753
}

Sources/SwiftSyntax/Documentation.docc/gyb_generated/SwiftSyntax.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
116116
- <doc:SwiftSyntax/NilLiteralExprSyntax>
117117
- <doc:SwiftSyntax/DiscardAssignmentExprSyntax>
118118
- <doc:SwiftSyntax/AssignmentExprSyntax>
119-
- <doc:SwiftSyntax/PackExpansionExprSyntax>
120119
- <doc:SwiftSyntax/PackElementExprSyntax>
121120
- <doc:SwiftSyntax/SequenceExprSyntax>
122121
- <doc:SwiftSyntax/PrefixOperatorExprSyntax>

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 17 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public struct RawExprSyntax: RawExprSyntaxNodeProtocol {
6565

6666
public static func isKindOf(_ raw: RawSyntax) -> Bool {
6767
switch raw.kind {
68-
case .missingExpr, .inOutExpr, .tryExpr, .awaitExpr, .moveExpr, .borrowExpr, .identifierExpr, .superRefExpr, .nilLiteralExpr, .discardAssignmentExpr, .assignmentExpr, .packExpansionExpr, .packElementExpr, .sequenceExpr, .prefixOperatorExpr, .binaryOperatorExpr, .arrowExpr, .infixOperatorExpr, .floatLiteralExpr, .tupleExpr, .arrayExpr, .dictionaryExpr, .integerLiteralExpr, .booleanLiteralExpr, .unresolvedTernaryExpr, .ternaryExpr, .memberAccessExpr, .unresolvedIsExpr, .isExpr, .unresolvedAsExpr, .asExpr, .typeExpr, .closureExpr, .unresolvedPatternExpr, .functionCallExpr, .subscriptExpr, .optionalChainingExpr, .forcedValueExpr, .postfixUnaryExpr, .specializeExpr, .stringLiteralExpr, .regexLiteralExpr, .keyPathExpr, .macroExpansionExpr, .postfixIfConfigExpr, .editorPlaceholderExpr: return true
68+
case .missingExpr, .inOutExpr, .tryExpr, .awaitExpr, .moveExpr, .borrowExpr, .identifierExpr, .superRefExpr, .nilLiteralExpr, .discardAssignmentExpr, .assignmentExpr, .packElementExpr, .sequenceExpr, .prefixOperatorExpr, .binaryOperatorExpr, .arrowExpr, .infixOperatorExpr, .floatLiteralExpr, .tupleExpr, .arrayExpr, .dictionaryExpr, .integerLiteralExpr, .booleanLiteralExpr, .unresolvedTernaryExpr, .ternaryExpr, .memberAccessExpr, .unresolvedIsExpr, .isExpr, .unresolvedAsExpr, .asExpr, .typeExpr, .closureExpr, .unresolvedPatternExpr, .functionCallExpr, .subscriptExpr, .optionalChainingExpr, .forcedValueExpr, .postfixUnaryExpr, .specializeExpr, .stringLiteralExpr, .regexLiteralExpr, .keyPathExpr, .macroExpansionExpr, .postfixIfConfigExpr, .editorPlaceholderExpr: return true
6969
default: return false
7070
}
7171
}
@@ -1693,66 +1693,6 @@ public struct RawAssignmentExprSyntax: RawExprSyntaxNodeProtocol {
16931693
}
16941694
}
16951695

1696-
@_spi(RawSyntax)
1697-
public struct RawPackExpansionExprSyntax: RawExprSyntaxNodeProtocol {
1698-
1699-
@_spi(RawSyntax)
1700-
public var layoutView: RawSyntaxLayoutView {
1701-
return raw.layoutView!
1702-
}
1703-
1704-
public static func isKindOf(_ raw: RawSyntax) -> Bool {
1705-
return raw.kind == .packExpansionExpr
1706-
}
1707-
1708-
public var raw: RawSyntax
1709-
init(raw: RawSyntax) {
1710-
assert(Self.isKindOf(raw))
1711-
self.raw = raw
1712-
}
1713-
1714-
public init?<Node: RawSyntaxNodeProtocol>(_ other: Node) {
1715-
guard Self.isKindOf(other.raw) else { return nil }
1716-
self.init(raw: other.raw)
1717-
}
1718-
1719-
public init(
1720-
_ unexpectedBeforeRepeatKeyword: RawUnexpectedNodesSyntax? = nil,
1721-
repeatKeyword: RawTokenSyntax,
1722-
_ unexpectedBetweenRepeatKeywordAndPatternExpr: RawUnexpectedNodesSyntax? = nil,
1723-
patternExpr: RawExprSyntax,
1724-
_ unexpectedAfterPatternExpr: RawUnexpectedNodesSyntax? = nil,
1725-
arena: __shared SyntaxArena
1726-
) {
1727-
let raw = RawSyntax.makeLayout(
1728-
kind: .packExpansionExpr, uninitializedCount: 5, arena: arena) { layout in
1729-
layout.initialize(repeating: nil)
1730-
layout[0] = unexpectedBeforeRepeatKeyword?.raw
1731-
layout[1] = repeatKeyword.raw
1732-
layout[2] = unexpectedBetweenRepeatKeywordAndPatternExpr?.raw
1733-
layout[3] = patternExpr.raw
1734-
layout[4] = unexpectedAfterPatternExpr?.raw
1735-
}
1736-
self.init(raw: raw)
1737-
}
1738-
1739-
public var unexpectedBeforeRepeatKeyword: RawUnexpectedNodesSyntax? {
1740-
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
1741-
}
1742-
public var repeatKeyword: RawTokenSyntax {
1743-
layoutView.children[1].map(RawTokenSyntax.init(raw:))!
1744-
}
1745-
public var unexpectedBetweenRepeatKeywordAndPatternExpr: RawUnexpectedNodesSyntax? {
1746-
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
1747-
}
1748-
public var patternExpr: RawExprSyntax {
1749-
layoutView.children[3].map(RawExprSyntax.init(raw:))!
1750-
}
1751-
public var unexpectedAfterPatternExpr: RawUnexpectedNodesSyntax? {
1752-
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
1753-
}
1754-
}
1755-
17561696
@_spi(RawSyntax)
17571697
public struct RawPackElementExprSyntax: RawExprSyntaxNodeProtocol {
17581698

@@ -16962,38 +16902,38 @@ public struct RawPackExpansionTypeSyntax: RawTypeSyntaxNodeProtocol {
1696216902
}
1696316903

1696416904
public init(
16965-
_ unexpectedBeforeRepeatKeyword: RawUnexpectedNodesSyntax? = nil,
16966-
repeatKeyword: RawTokenSyntax,
16967-
_ unexpectedBetweenRepeatKeywordAndPatternType: RawUnexpectedNodesSyntax? = nil,
16905+
_ unexpectedBeforePatternType: RawUnexpectedNodesSyntax? = nil,
1696816906
patternType: RawTypeSyntax,
16969-
_ unexpectedAfterPatternType: RawUnexpectedNodesSyntax? = nil,
16907+
_ unexpectedBetweenPatternTypeAndEllipsis: RawUnexpectedNodesSyntax? = nil,
16908+
ellipsis: RawTokenSyntax,
16909+
_ unexpectedAfterEllipsis: RawUnexpectedNodesSyntax? = nil,
1697016910
arena: __shared SyntaxArena
1697116911
) {
1697216912
let raw = RawSyntax.makeLayout(
1697316913
kind: .packExpansionType, uninitializedCount: 5, arena: arena) { layout in
1697416914
layout.initialize(repeating: nil)
16975-
layout[0] = unexpectedBeforeRepeatKeyword?.raw
16976-
layout[1] = repeatKeyword.raw
16977-
layout[2] = unexpectedBetweenRepeatKeywordAndPatternType?.raw
16978-
layout[3] = patternType.raw
16979-
layout[4] = unexpectedAfterPatternType?.raw
16915+
layout[0] = unexpectedBeforePatternType?.raw
16916+
layout[1] = patternType.raw
16917+
layout[2] = unexpectedBetweenPatternTypeAndEllipsis?.raw
16918+
layout[3] = ellipsis.raw
16919+
layout[4] = unexpectedAfterEllipsis?.raw
1698016920
}
1698116921
self.init(raw: raw)
1698216922
}
1698316923

16984-
public var unexpectedBeforeRepeatKeyword: RawUnexpectedNodesSyntax? {
16924+
public var unexpectedBeforePatternType: RawUnexpectedNodesSyntax? {
1698516925
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
1698616926
}
16987-
public var repeatKeyword: RawTokenSyntax {
16988-
layoutView.children[1].map(RawTokenSyntax.init(raw:))!
16927+
public var patternType: RawTypeSyntax {
16928+
layoutView.children[1].map(RawTypeSyntax.init(raw:))!
1698916929
}
16990-
public var unexpectedBetweenRepeatKeywordAndPatternType: RawUnexpectedNodesSyntax? {
16930+
public var unexpectedBetweenPatternTypeAndEllipsis: RawUnexpectedNodesSyntax? {
1699116931
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
1699216932
}
16993-
public var patternType: RawTypeSyntax {
16994-
layoutView.children[3].map(RawTypeSyntax.init(raw:))!
16933+
public var ellipsis: RawTokenSyntax {
16934+
layoutView.children[3].map(RawTokenSyntax.init(raw:))!
1699516935
}
16996-
public var unexpectedAfterPatternType: RawUnexpectedNodesSyntax? {
16936+
public var unexpectedAfterEllipsis: RawUnexpectedNodesSyntax? {
1699716937
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
1699816938
}
1699916939
}

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -278,14 +278,6 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
278278
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
279279
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
280280
break
281-
case .packExpansionExpr:
282-
assert(layout.count == 5)
283-
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
284-
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
285-
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
286-
assertNoError(kind, 3, verify(layout[3], as: RawExprSyntax.self))
287-
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
288-
break
289281
case .packElementExpr:
290282
assert(layout.count == 5)
291283
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
@@ -2469,9 +2461,9 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
24692461
case .packExpansionType:
24702462
assert(layout.count == 5)
24712463
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
2472-
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
2464+
assertNoError(kind, 1, verify(layout[1], as: RawTypeSyntax.self))
24732465
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
2474-
assertNoError(kind, 3, verify(layout[3], as: RawTypeSyntax.self))
2466+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self))
24752467
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
24762468
break
24772469
case .packReferenceType:

0 commit comments

Comments
 (0)