From e374eba37c002aa8238f00f77a34673a7536f5b1 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Thu, 6 Jul 2023 16:07:31 -0700 Subject: [PATCH] scanNumber: smaller return value + side effects (#54534) --- src/compiler/scanner.ts | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index c2d945a0209..bd1e3854ac9 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1142,7 +1142,7 @@ export function createScanner(languageVersion: ScriptTarget, // | NonOctalDecimalIntegerLiteral // LegacyOctalIntegerLiteral ::= '0' [0-7]+ // NonOctalDecimalIntegerLiteral ::= '0' [0-7]* [89] [0-9]* - function scanNumber(): { type: SyntaxKind, value: string } { + function scanNumber(): SyntaxKind { let start = pos; let mainFragment: string; if (text.charCodeAt(pos) === CharacterCodes._0) { @@ -1173,7 +1173,7 @@ export function createScanner(languageVersion: ScriptTarget, const literal = (withMinus ? "-" : "") + "0o" + (+tokenValue).toString(8); if (withMinus) start--; error(Diagnostics.Octal_literals_are_not_allowed_Use_the_syntax_0, start, pos - start, literal); - return { type: SyntaxKind.NumericLiteral, value: tokenValue }; + return SyntaxKind.NumericLiteral; } } else { @@ -1217,21 +1217,21 @@ export function createScanner(languageVersion: ScriptTarget, if (tokenFlags & TokenFlags.ContainsLeadingZero) { error(Diagnostics.Decimals_with_leading_zeros_are_not_allowed, start, end - start); // if a literal has a leading zero, it must not be bigint - return { type: SyntaxKind.NumericLiteral, value: "" + +result }; + tokenValue = "" + +result; + return SyntaxKind.NumericLiteral; } if (decimalFragment !== undefined || tokenFlags & TokenFlags.Scientific) { checkForIdentifierStartAfterNumericLiteral(start, decimalFragment === undefined && !!(tokenFlags & TokenFlags.Scientific)); - return { - type: SyntaxKind.NumericLiteral, - value: "" + +result // if value is not an integer, it can be safely coerced to a number - }; + // if value is not an integer, it can be safely coerced to a number + tokenValue = "" + +result; + return SyntaxKind.NumericLiteral; } else { tokenValue = result; const type = checkBigIntSuffix(); // if value is an integer, check whether it is a bigint checkForIdentifierStartAfterNumericLiteral(start); - return { type, value: tokenValue }; + return type; } } @@ -1937,7 +1937,7 @@ export function createScanner(languageVersion: ScriptTarget, return token = SyntaxKind.MinusToken; case CharacterCodes.dot: if (isDigit(text.charCodeAt(pos + 1))) { - tokenValue = scanNumber().value; + scanNumber(); return token = SyntaxKind.NumericLiteral; } if (text.charCodeAt(pos + 1) === CharacterCodes.dot && text.charCodeAt(pos + 2) === CharacterCodes.dot) { @@ -2065,8 +2065,7 @@ export function createScanner(languageVersion: ScriptTarget, case CharacterCodes._7: case CharacterCodes._8: case CharacterCodes._9: - ({ type: token, value: tokenValue } = scanNumber()); - return token; + return token = scanNumber(); case CharacterCodes.colon: pos++; return token = SyntaxKind.ColonToken;