From 18df6376173213c7dc789b5ce1ac480b91a13e2a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 11 Jul 2024 21:33:13 +0000 Subject: [PATCH 1/2] Move shebang check into the same branch as other `#` cases. --- src/compiler/scanner.ts | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index fe0a99d86488b..ac340e3ce9e35 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1882,18 +1882,6 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } const ch = codePointUnchecked(pos); - if (pos === 0) { - // Special handling for shebang - if (ch === CharacterCodes.hash && isShebangTrivia(text, pos)) { - pos = scanShebangTrivia(text, pos); - if (skipTrivia) { - continue; - } - else { - return token = SyntaxKind.ShebangTrivia; - } - } - } switch (ch) { case CharacterCodes.lineFeed: @@ -2302,13 +2290,24 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean pos++; return token = SyntaxKind.Unknown; case CharacterCodes.hash: - if (pos !== 0 && text[pos + 1] === "!") { - error(Diagnostics.can_only_be_used_at_the_start_of_a_file, pos, 2); - pos++; - return token = SyntaxKind.Unknown; + // Special handling for shebang + const charAfterHash = codePointUnchecked(pos + 1); + if (charAfterHash === CharacterCodes.exclamation) { + if (pos !== 0) { + error(Diagnostics.can_only_be_used_at_the_start_of_a_file, pos, 2); + pos++; + return token = SyntaxKind.Unknown; + } + + pos = scanShebangTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = SyntaxKind.ShebangTrivia; + } } - const charAfterHash = codePointUnchecked(pos + 1); if (charAfterHash === CharacterCodes.backslash) { pos++; const extendedCookedChar = peekExtendedUnicodeEscape(); From bc21cdd7bc6d130b51fe95793ec0269bd1b873a0 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 11 Jul 2024 21:49:29 +0000 Subject: [PATCH 2/2] Add a quicker check for identifiers, check for space sooner. --- src/compiler/scanner.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index ac340e3ce9e35..ddad2d234d667 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1883,6 +1883,11 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean const ch = codePointUnchecked(pos); + if (CharacterCodes.a <= (ch | 32) && (ch | 32) <= CharacterCodes.z) { + const identifierKind = scanIdentifier(ch, languageVersion); + return identifierKind!; + } + switch (ch) { case CharacterCodes.lineFeed: case CharacterCodes.carriageReturn: @@ -1901,10 +1906,10 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean } return token = SyntaxKind.NewLineTrivia; } + case CharacterCodes.space: case CharacterCodes.tab: case CharacterCodes.verticalTab: case CharacterCodes.formFeed: - case CharacterCodes.space: case CharacterCodes.nonBreakingSpace: case CharacterCodes.ogham: case CharacterCodes.enQuad: