Skip to content

Commit 36eb1ce

Browse files
authored
Merge pull request #14324 from mihailik/master
Special-case (0,eval) for side-effect-free 0 left of comma
2 parents 90ad8dc + baef2aa commit 36eb1ce

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

Diff for: src/compiler/checker.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -15929,12 +15929,16 @@ namespace ts {
1592915929
checkAssignmentOperator(rightType);
1593015930
return getRegularTypeOfObjectLiteral(rightType);
1593115931
case SyntaxKind.CommaToken:
15932-
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left)) {
15932+
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isEvalNode(right)) {
1593315933
error(left, Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects);
1593415934
}
1593515935
return rightType;
1593615936
}
1593715937

15938+
function isEvalNode(node: Expression) {
15939+
return node.kind === SyntaxKind.Identifier && (node as Identifier).text === "eval";
15940+
}
15941+
1593815942
// Return true if there was no error, false if there was an error.
1593915943
function checkForDisallowedESSymbolOperand(operator: SyntaxKind): boolean {
1594015944
const offendingSymbolOperand =

Diff for: tests/baselines/reference/evalAfter0.errors.txt

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
tests/cases/compiler/evalAfter0.ts(4,2): error TS2695: Left side of comma operator is unused and has no side effects.
2+
3+
4+
==== tests/cases/compiler/evalAfter0.ts (1 errors) ====
5+
(0,eval)("10"); // fine: special case for eval
6+
7+
declare var eva;
8+
(0,eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)
9+
~
10+
!!! error TS2695: Left side of comma operator is unused and has no side effects.

Diff for: tests/baselines/reference/evalAfter0.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [evalAfter0.ts]
2+
(0,eval)("10"); // fine: special case for eval
3+
4+
declare var eva;
5+
(0,eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)
6+
7+
//// [evalAfter0.js]
8+
(0, eval)("10"); // fine: special case for eval
9+
(0, eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)

Diff for: tests/cases/compiler/evalAfter0.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(0,eval)("10"); // fine: special case for eval
2+
3+
declare var eva;
4+
(0,eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)

0 commit comments

Comments
 (0)