@@ -197,101 +197,28 @@ let tokenKindFile = SourceFileSyntax {
197197 // `RawTokenBaseKind` for equality. With the raw value, it compiles down to
198198 // a primitive integer compare, without, it calls into `__derived_enum_equals`.
199199 @frozen // FIXME: Not actually stable, works around a miscompile
200- public enum RawTokenBaseKind : UInt8, Equatable, Hashable
200+ public enum RawTokenKind : UInt8, Equatable, Hashable
201201 """
202202 ) {
203203 DeclSyntax ( " case eof " )
204204
205205 for token in SYNTAX_TOKENS {
206206 DeclSyntax ( " case \( raw: token. swiftKind) " )
207207 }
208- }
209-
210- DeclSyntax (
211- """
212- fileprivate extension Keyword {
213- static var rawValueZero: Keyword {
214- return Keyword(rawValue: 0)!
215- }
216- }
217- """
218- )
219-
220- try ! StructDeclSyntax (
221- """
222- /// Similar to `TokenKind` but without a `String` associated value.
223- /// Technically, this should be an enum like
224- /// ```
225- /// enum RawTokenKind {
226- /// case eof
227- /// case associatedtypeKeyword
228- /// // remaining case from `RawTokenBaseKind`...
229- /// case keyword(Keyword)
230- /// }
231- /// ```
232- ///
233- /// But modelling it this way has significant performance implications since
234- /// comparing two `RawTokenKind` calls into `__derived_enum_equals`. It's more
235- /// effient to model the base kind as an enum with a raw value and store the
236- /// keyword separately.
237- ///
238- /// Whenever `base` is not `keyword`, `keyword` should have a raw value
239- /// of `0`.
240- @frozen // FIXME: Not actually stable, works around a miscompile
241- public struct RawTokenKind: Equatable, Hashable
242- """
243- ) {
244- DeclSyntax ( " public let base: RawTokenBaseKind " )
245- DeclSyntax ( " public let keyword: Keyword " )
246-
247- DeclSyntax (
248- """
249- public init(base: RawTokenBaseKind, keyword: Keyword) {
250- assert(base == .keyword || keyword.rawValue == 0)
251- self.base = base
252- self.keyword = keyword
253- }
254- """
255- )
256-
257- DeclSyntax (
258- """
259- public static var eof: RawTokenKind {
260- return RawTokenKind(base: .eof, keyword: .rawValueZero)
261- }
262- """
263- )
264- for token in SYNTAX_TOKENS where token. swiftKind != " keyword " {
265- try VariableDeclSyntax ( " public static var \( raw: token. swiftKind) : RawTokenKind " ) {
266- StmtSyntax ( " return RawTokenKind(base: . \( raw: token. swiftKind) , keyword: .rawValueZero) " )
267- }
268- }
269-
270- DeclSyntax (
271- """
272- public static func keyword(_ keyword: Keyword) -> RawTokenKind {
273- return RawTokenKind(base: .keyword, keyword: keyword)
274- }
275- """
276- )
277208
278209 try VariableDeclSyntax (
279210 """
280211 @_spi(RawSyntax)
281212 public var defaultText: SyntaxText?
282213 """
283214 ) {
284- try ! SwitchExprSyntax ( " switch self.base " ) {
215+ try ! SwitchExprSyntax ( " switch self " ) {
285216 SwitchCaseSyntax ( " case .eof: " ) {
286217 StmtSyntax ( #"return """# )
287218 }
288219
289220 for token in SYNTAX_TOKENS {
290- if token. swiftKind == " keyword " {
291- SwitchCaseSyntax ( " case . \( raw: token. swiftKind) : " ) {
292- StmtSyntax ( " return self.keyword.defaultText " )
293- }
294- } else if let text = token. text {
221+ if let text = token. text {
295222 SwitchCaseSyntax ( " case . \( raw: token. swiftKind) : " ) {
296223 StmtSyntax ( " return # \" \( raw: text) \" # " )
297224 }
@@ -314,7 +241,7 @@ let tokenKindFile = SourceFileSyntax {
314241 public var isPunctuation: Bool
315242 """
316243 ) {
317- try ! SwitchExprSyntax ( " switch self.base " ) {
244+ try ! SwitchExprSyntax ( " switch self " ) {
318245 SwitchCaseSyntax ( " case .eof: " ) {
319246 StmtSyntax ( " return false " )
320247 }
@@ -336,16 +263,22 @@ let tokenKindFile = SourceFileSyntax {
336263 public static func fromRaw(kind rawKind: RawTokenKind, text: String) -> TokenKind
337264 """
338265 ) {
339- try ! SwitchExprSyntax ( " switch rawKind.base " ) {
266+ try ! SwitchExprSyntax ( " switch rawKind " ) {
340267 SwitchCaseSyntax ( " case .eof: " ) {
341268 StmtSyntax ( " return .eof " )
342269 }
343270
344271 for token in SYNTAX_TOKENS {
345272 if token. swiftKind == " keyword " {
346273 SwitchCaseSyntax ( " case . \( raw: token. swiftKind) : " ) {
347- ExprSyntax ( " assert(text.isEmpty || String(syntaxText: rawKind.keyword.defaultText) == text) " )
348- StmtSyntax ( " return .keyword(rawKind.keyword) " )
274+ DeclSyntax ( " var text = text " )
275+ StmtSyntax (
276+ """
277+ return text.withSyntaxText { text in
278+ return .keyword(Keyword(text)!)
279+ }
280+ """
281+ )
349282 }
350283 } else if token. text != nil {
351284 SwitchCaseSyntax ( " case . \( raw: token. swiftKind) : " ) {
@@ -377,7 +310,7 @@ let tokenKindFile = SourceFileSyntax {
377310 for token in SYNTAX_TOKENS {
378311 if token. swiftKind == " keyword " {
379312 SwitchCaseSyntax ( " case . \( raw: token. swiftKind) (let keyword): " ) {
380- StmtSyntax ( " return (. \( raw: token. swiftKind) ( keyword), nil )" )
313+ StmtSyntax ( " return (. \( raw: token. swiftKind) , String(syntaxText: keyword.defaultText) )" )
381314 }
382315 } else if token. text != nil {
383316 SwitchCaseSyntax ( " case . \( raw: token. swiftKind) : " ) {
0 commit comments