Skip to content

Commit 6f25e17

Browse files
committed
Address ASTGen feedback
1 parent e534cc1 commit 6f25e17

File tree

2 files changed

+31
-75
lines changed

2 files changed

+31
-75
lines changed

lib/ASTGen/Sources/ASTGen/Generics.swift

Lines changed: 30 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import ASTBridging
1414

1515
@_spi(ExperimentalLanguageFeatures)
16+
@_spi(RawSyntax)
1617
import SwiftSyntax
1718

1819
extension ASTGenVisitor {
@@ -95,30 +96,8 @@ extension ASTGenVisitor {
9596
case .type(let type):
9697
return self.generate(type: type)
9798

98-
// The only expressions same type left types support right now are
99-
// integer literals, '123', and prefix operators for negative integer
100-
// literals, '-123'.
10199
case .expr(let expr):
102-
switch expr.as(ExprSyntaxEnum.self) {
103-
case .integerLiteralExpr(let node):
104-
return self.generate(integerType: node)
105-
106-
case .prefixOperatorExpr(let node):
107-
let op = node.operator
108-
109-
guard op.text == "-" else {
110-
fatalError("Unknown prefix operator for same type left type")
111-
}
112-
113-
guard case .integerLiteralExpr(let node) = node.expression.as(ExprSyntaxEnum.self) else {
114-
fatalError("Unknown expression kind for same type left type")
115-
}
116-
117-
return self.generate(integerType: node, minusLoc: self.generateSourceLoc(op))
118-
119-
default:
120-
fatalError("Unknown expression kind for same type left type")
121-
}
100+
return self.generateIntegerType(expr: expr).asTypeRepr
122101
}
123102
}
124103

@@ -127,30 +106,8 @@ extension ASTGenVisitor {
127106
case .type(let type):
128107
return self.generate(type: type)
129108

130-
// The only expressions same type right types support right now are
131-
// integer literals, '123', and prefix operators for negative integer
132-
// literals, '-123'.
133109
case .expr(let expr):
134-
switch expr.as(ExprSyntaxEnum.self) {
135-
case .integerLiteralExpr(let node):
136-
return self.generate(integerType: node)
137-
138-
case .prefixOperatorExpr(let node):
139-
let op = node.operator
140-
141-
guard op.text == "-" else {
142-
fatalError("Unknown prefix operator for same type right type")
143-
}
144-
145-
guard case .integerLiteralExpr(let node) = node.expression.as(ExprSyntaxEnum.self) else {
146-
fatalError("Unknown expression kind for same type right type")
147-
}
148-
149-
return self.generate(integerType: node, minusLoc: self.generateSourceLoc(op))
150-
151-
default:
152-
fatalError("Unknown expression kind for same type right type")
153-
}
110+
return self.generateIntegerType(expr: expr).asTypeRepr
154111
}
155112
}
156113

@@ -159,47 +116,45 @@ extension ASTGenVisitor {
159116
case .type(let type):
160117
return self.generate(type: type)
161118

162-
// The only expressions generic argument types support right now are
163-
// integer literals, '123', and prefix operators for negative integer
164-
// literals, '-123'.
165119
case .expr(let expr):
166-
switch expr.as(ExprSyntaxEnum.self) {
167-
case .integerLiteralExpr(let node):
168-
return self.generate(integerType: node)
120+
return self.generateIntegerType(expr: expr).asTypeRepr
121+
}
122+
}
169123

170-
case .prefixOperatorExpr(let node):
171-
let op = node.operator
124+
func generateIntegerType(expr node: ExprSyntax) -> BridgedIntegerTypeRepr {
125+
var minusLoc = BridgedSourceLoc()
126+
let literalExpr: IntegerLiteralExprSyntax
172127

173-
guard op.text == "-" else {
174-
fatalError("Unknown prefix operator for generic argument type")
175-
}
128+
// The only expressions generic argument types support right now are
129+
// integer literals, '123', and prefix operators for negative integer
130+
// literals, '-123'.
131+
switch node.as(ExprSyntaxEnum.self) {
132+
case .integerLiteralExpr(let node):
133+
literalExpr = node
176134

177-
guard case .integerLiteralExpr(let node) = node.expression.as(ExprSyntaxEnum.self) else {
178-
fatalError("Unknown expression kind for generic argument type")
179-
}
135+
case .prefixOperatorExpr(let node):
136+
let op = node.operator
180137

181-
return self.generate(integerType: node, minusLoc: self.generateSourceLoc(op))
138+
guard op.text == "-" else {
139+
fatalError("Unknown prefix operator for generic argument type")
140+
}
182141

183-
default:
142+
guard let node = node.expression.as(IntegerLiteralExprSyntax.self) else {
184143
fatalError("Unknown expression kind for generic argument type")
185144
}
186-
}
187-
}
188145

189-
func generate(
190-
integerType node: IntegerLiteralExprSyntax,
191-
minusLoc: BridgedSourceLoc = BridgedSourceLoc()
192-
) -> BridgedTypeRepr {
193-
var desc = node.trimmedDescription
194-
let str = desc.withBridgedString {
195-
self.ctx.allocateCopy(string: $0)
146+
minusLoc = self.generateSourceLoc(op)
147+
literalExpr = node
148+
149+
default:
150+
fatalError("Unknown expression kind for generic argument type")
196151
}
197152

198-
return BridgedIntegerTypeRepr.createParsed(
153+
return .createParsed(
199154
self.ctx,
200-
string: str,
201-
loc: self.generateSourceLoc(node),
155+
string: self.copyAndStripUnderscores(text: literalExpr.literal.rawText),
156+
loc: self.generateSourceLoc(literalExpr),
202157
minusLoc: minusLoc
203-
).asTypeRepr
158+
)
204159
}
205160
}

lib/ASTGen/Sources/ASTGen/SourceFile.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ extension Parser.ExperimentalFeatures {
7575
mapFeature(.NonescapableTypes, to: .nonescapableTypes)
7676
mapFeature(.TrailingComma, to: .trailingComma)
7777
mapFeature(.CoroutineAccessors, to: .coroutineAccessors)
78+
mapFeature(.ValueGenerics, to: .valueGenerics)
7879
}
7980
}
8081

0 commit comments

Comments
 (0)