Correctly error on enum member values referring to identifiers shadowing Infinity and NaN (#55018)

This commit is contained in:
Mateusz Burzyński
2023-08-03 00:55:55 +02:00
committed by GitHub
parent 30fe6ada02
commit 1481750043
6 changed files with 145 additions and 3 deletions

View File

@@ -43854,11 +43854,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
return +(expr as NumericLiteral).text;
case SyntaxKind.ParenthesizedExpression:
return evaluate((expr as ParenthesizedExpression).expression, location);
case SyntaxKind.Identifier:
if (isInfinityOrNaNString((expr as Identifier).escapedText)) {
return +((expr as Identifier).escapedText);
case SyntaxKind.Identifier: {
const identifier = expr as Identifier;
if (isInfinityOrNaNString(identifier.escapedText) && (resolveEntityName(identifier, SymbolFlags.Value, /*ignoreErrors*/ true) === getGlobalSymbol(identifier.escapedText, SymbolFlags.Value, /*diagnostic*/ undefined))) {
return +(identifier.escapedText);
}
// falls through
}
case SyntaxKind.PropertyAccessExpression:
if (isEntityNameExpression(expr)) {
const symbol = resolveEntityName(expr, SymbolFlags.Value, /*ignoreErrors*/ true);