From 9830671eef604cc6c49cbc29da2c1fc92e8bd9f9 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 2 Jul 2024 08:36:09 +0000 Subject: [PATCH] Check for CR, LF, space, and tab before doing the lookup. --- src/compiler/scanner.ts | 49 ++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 0929a2e7712..3dab6570c37 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1991,28 +1991,41 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean const ch = codePointUnchecked(pos); + if (ch === CharacterCodes.tab || ch === CharacterCodes.space) { + if (skipTrivia) { + pos++; + continue; + } + else { + while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { + pos++; + } + return token = SyntaxKind.WhitespaceTrivia; + } + } + + if (ch === CharacterCodes.lineFeed || ch === CharacterCodes.carriageReturn) { + tokenFlags |= TokenFlags.PrecedingLineBreak; + if (skipTrivia) { + pos++; + continue; + } + else { + if (ch === CharacterCodes.carriageReturn && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.lineFeed) { + // consume both CR and LF + pos += 2; + } + else { + pos++; + } + return token = SyntaxKind.NewLineTrivia; + } + } + 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) { - pos++; - continue; - } - else { - if (ch === CharacterCodes.carriageReturn && pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes.lineFeed) { - // consume both CR and LF - pos += 2; - } - else { - pos++; - } - return token = SyntaxKind.NewLineTrivia; - } - } - if (tokenInfo & TokenInfo.Whitespace) { if (skipTrivia) { pos++;