From f43891898a4872ccd61cfa960ebf4faf185eca27 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 2 Jul 2024 07:37:12 +0000 Subject: [PATCH] Use an array for common cases. --- src/compiler/scanner.ts | 107 +++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 44 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index ac7b5287f94..8b4148aead4 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -302,56 +302,73 @@ const regExpFlagToFirstAvailableLanguageVersion = new Map(); +for (let i = 0; i < CharacterCodes.maxAsciiCharacter; i++) { + charcodeToTokenInfoCommon.push(0); +} - // Single Line Whitespace - [CharacterCodes.tab, TokenInfo.SingleLine], - [CharacterCodes.verticalTab, TokenInfo.SingleLine], - [CharacterCodes.formFeed, TokenInfo.SingleLine], - [CharacterCodes.space, TokenInfo.SingleLine], - [CharacterCodes.nonBreakingSpace, TokenInfo.SingleLine], - [CharacterCodes.ogham, TokenInfo.SingleLine], - [CharacterCodes.enQuad, TokenInfo.SingleLine], - [CharacterCodes.emQuad, TokenInfo.SingleLine], - [CharacterCodes.enSpace, TokenInfo.SingleLine], - [CharacterCodes.emSpace, TokenInfo.SingleLine], - [CharacterCodes.threePerEmSpace, TokenInfo.SingleLine], - [CharacterCodes.fourPerEmSpace, TokenInfo.SingleLine], - [CharacterCodes.sixPerEmSpace, TokenInfo.SingleLine], - [CharacterCodes.figureSpace, TokenInfo.SingleLine], - [CharacterCodes.punctuationSpace, TokenInfo.SingleLine], - [CharacterCodes.thinSpace, TokenInfo.SingleLine], - [CharacterCodes.hairSpace, TokenInfo.SingleLine], - [CharacterCodes.zeroWidthSpace, TokenInfo.SingleLine], - [CharacterCodes.narrowNoBreakSpace, TokenInfo.SingleLine], - [CharacterCodes.mathematicalSpace, TokenInfo.SingleLine], - [CharacterCodes.ideographicSpace, TokenInfo.SingleLine], - [CharacterCodes.byteOrderMark, TokenInfo.SingleLine], +for ( + const [key, value] of [ + // Line Break Whitespace + [CharacterCodes.lineFeed, TokenInfo.LineBreak], + [CharacterCodes.carriageReturn, TokenInfo.LineBreak], - // Simple Single-Character Tokens - [CharacterCodes.openParen, TokenInfo.SimpleToken | SyntaxKind.OpenParenToken], - [CharacterCodes.closeParen, TokenInfo.SimpleToken | SyntaxKind.CloseParenToken], - [CharacterCodes.comma, TokenInfo.SimpleToken | SyntaxKind.CommaToken], - [CharacterCodes.colon, TokenInfo.SimpleToken | SyntaxKind.ColonToken], - [CharacterCodes.semicolon, TokenInfo.SimpleToken | SyntaxKind.SemicolonToken], - [CharacterCodes.openBracket, TokenInfo.SimpleToken | SyntaxKind.OpenBracketToken], - [CharacterCodes.closeBracket, TokenInfo.SimpleToken | SyntaxKind.CloseBracketToken], - [CharacterCodes.openBrace, TokenInfo.SimpleToken | SyntaxKind.OpenBraceToken], - [CharacterCodes.closeBrace, TokenInfo.SimpleToken | SyntaxKind.CloseBraceToken], - [CharacterCodes.tilde, TokenInfo.SimpleToken | SyntaxKind.TildeToken], - [CharacterCodes.at, TokenInfo.SimpleToken | SyntaxKind.AtToken], -]); + // Single Line Whitespace + [CharacterCodes.tab, TokenInfo.SingleLine], + [CharacterCodes.verticalTab, TokenInfo.SingleLine], + [CharacterCodes.formFeed, TokenInfo.SingleLine], + [CharacterCodes.space, TokenInfo.SingleLine], + [CharacterCodes.nonBreakingSpace, TokenInfo.SingleLine], + [CharacterCodes.ogham, TokenInfo.SingleLine], + [CharacterCodes.enQuad, TokenInfo.SingleLine], + [CharacterCodes.emQuad, TokenInfo.SingleLine], + [CharacterCodes.enSpace, TokenInfo.SingleLine], + [CharacterCodes.emSpace, TokenInfo.SingleLine], + [CharacterCodes.threePerEmSpace, TokenInfo.SingleLine], + [CharacterCodes.fourPerEmSpace, TokenInfo.SingleLine], + [CharacterCodes.sixPerEmSpace, TokenInfo.SingleLine], + [CharacterCodes.figureSpace, TokenInfo.SingleLine], + [CharacterCodes.punctuationSpace, TokenInfo.SingleLine], + [CharacterCodes.thinSpace, TokenInfo.SingleLine], + [CharacterCodes.hairSpace, TokenInfo.SingleLine], + [CharacterCodes.zeroWidthSpace, TokenInfo.SingleLine], + [CharacterCodes.narrowNoBreakSpace, TokenInfo.SingleLine], + [CharacterCodes.mathematicalSpace, TokenInfo.SingleLine], + [CharacterCodes.ideographicSpace, TokenInfo.SingleLine], + [CharacterCodes.byteOrderMark, TokenInfo.SingleLine], + + // Simple Single-Character Tokens + [CharacterCodes.openParen, TokenInfo.SimpleToken | SyntaxKind.OpenParenToken], + [CharacterCodes.closeParen, TokenInfo.SimpleToken | SyntaxKind.CloseParenToken], + [CharacterCodes.comma, TokenInfo.SimpleToken | SyntaxKind.CommaToken], + [CharacterCodes.colon, TokenInfo.SimpleToken | SyntaxKind.ColonToken], + [CharacterCodes.semicolon, TokenInfo.SimpleToken | SyntaxKind.SemicolonToken], + [CharacterCodes.openBracket, TokenInfo.SimpleToken | SyntaxKind.OpenBracketToken], + [CharacterCodes.closeBracket, TokenInfo.SimpleToken | SyntaxKind.CloseBracketToken], + [CharacterCodes.openBrace, TokenInfo.SimpleToken | SyntaxKind.OpenBraceToken], + [CharacterCodes.closeBrace, TokenInfo.SimpleToken | SyntaxKind.CloseBraceToken], + [CharacterCodes.tilde, TokenInfo.SimpleToken | SyntaxKind.TildeToken], + [CharacterCodes.at, TokenInfo.SimpleToken | SyntaxKind.AtToken], + ] +) { + if (key < charcodeToTokenInfoCommon.length) { + charcodeToTokenInfoCommon[key] = value; + } + else { + charcodeToTokenInfoUncommon.set(key, value); + } +} /* As per ECMAScript Language Specification 5th Edition, Section 7.6: ISyntaxToken Names and Identifiers @@ -1935,8 +1952,10 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean const ch = codePointUnchecked(pos); - const tokenInfo = charcodeToTokenInfo.get(ch); - if (tokenInfo !== undefined) { + const tokenInfo = ch < charcodeToTokenInfoCommon.length ? + charcodeToTokenInfoCommon[ch] : + charcodeToTokenInfoUncommon.get(ch) ?? TokenInfo.None; + if (tokenInfo !== TokenInfo.None) { if (tokenInfo & TokenInfo.LineBreak) { tokenFlags |= TokenFlags.PrecedingLineBreak; if (skipTrivia) {