From 7f6376794e23228064bfbc290043d00c6305d8bc Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 6 Apr 2023 13:37:12 -0700 Subject: [PATCH] Reuse operandType in checkPrefixUnaryExpression (#53682) --- src/compiler/checker.ts | 2 +- .../nestedUnaryExpressionHang.errors.txt | 11 ++++++ .../reference/nestedUnaryExpressionHang.js | 6 ++++ .../nestedUnaryExpressionHang.symbols | 4 +++ .../reference/nestedUnaryExpressionHang.types | 35 +++++++++++++++++++ .../compiler/nestedUnaryExpressionHang.ts | 1 + 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/nestedUnaryExpressionHang.errors.txt create mode 100644 tests/baselines/reference/nestedUnaryExpressionHang.js create mode 100644 tests/baselines/reference/nestedUnaryExpressionHang.symbols create mode 100644 tests/baselines/reference/nestedUnaryExpressionHang.types create mode 100644 tests/cases/compiler/nestedUnaryExpressionHang.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d4137af578d..4b32f7459cf 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -36120,7 +36120,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } return getUnaryResultType(operandType); case SyntaxKind.ExclamationToken: - checkTruthinessExpression(node.operand); + checkTruthinessOfType(operandType, node.operand); const facts = getTypeFacts(operandType) & (TypeFacts.Truthy | TypeFacts.Falsy); return facts === TypeFacts.Truthy ? falseType : facts === TypeFacts.Falsy ? trueType : diff --git a/tests/baselines/reference/nestedUnaryExpressionHang.errors.txt b/tests/baselines/reference/nestedUnaryExpressionHang.errors.txt new file mode 100644 index 00000000000..bd0f0d568a6 --- /dev/null +++ b/tests/baselines/reference/nestedUnaryExpressionHang.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/nestedUnaryExpressionHang.ts(1,6): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. +tests/cases/compiler/nestedUnaryExpressionHang.ts(1,34): error TS1109: Expression expected. + + +==== tests/cases/compiler/nestedUnaryExpressionHang.ts (2 errors) ==== + 3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. + +!!! error TS1109: Expression expected. + \ No newline at end of file diff --git a/tests/baselines/reference/nestedUnaryExpressionHang.js b/tests/baselines/reference/nestedUnaryExpressionHang.js new file mode 100644 index 00000000000..54ba6074000 --- /dev/null +++ b/tests/baselines/reference/nestedUnaryExpressionHang.js @@ -0,0 +1,6 @@ +//// [nestedUnaryExpressionHang.ts] +3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + +//// [nestedUnaryExpressionHang.js] +3333 % !!!!!!!!!!!!!!!!!!!!!!!!!!!!; diff --git a/tests/baselines/reference/nestedUnaryExpressionHang.symbols b/tests/baselines/reference/nestedUnaryExpressionHang.symbols new file mode 100644 index 00000000000..73e11816f5b --- /dev/null +++ b/tests/baselines/reference/nestedUnaryExpressionHang.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/nestedUnaryExpressionHang.ts === + +3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!! + diff --git a/tests/baselines/reference/nestedUnaryExpressionHang.types b/tests/baselines/reference/nestedUnaryExpressionHang.types new file mode 100644 index 00000000000..21057780d6d --- /dev/null +++ b/tests/baselines/reference/nestedUnaryExpressionHang.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/nestedUnaryExpressionHang.ts === +3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!! +>3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!! : number +>3333 : 3333 +>!!!!!!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!!! : boolean +>!!!!!!!!!!!! : boolean +>!!!!!!!!!!! : boolean +>!!!!!!!!!! : boolean +>!!!!!!!!! : boolean +>!!!!!!!! : boolean +>!!!!!!! : boolean +>!!!!!! : boolean +>!!!!! : boolean +>!!!! : boolean +>!!! : boolean +>!! : boolean +>! : boolean + +> : any + diff --git a/tests/cases/compiler/nestedUnaryExpressionHang.ts b/tests/cases/compiler/nestedUnaryExpressionHang.ts new file mode 100644 index 00000000000..4f14530ca0f --- /dev/null +++ b/tests/cases/compiler/nestedUnaryExpressionHang.ts @@ -0,0 +1 @@ +3333%!!!!!!!!!!!!!!!!!!!!!!!!!!!!