Merge pull request #14324 from mihailik/master

Special-case (0,eval) for side-effect-free 0 left of comma
This commit is contained in:
Mohamed Hegazy 2017-02-27 11:32:11 -08:00 committed by GitHub
commit 36eb1ced1d
4 changed files with 28 additions and 1 deletions

View File

@ -15929,12 +15929,16 @@ namespace ts {
checkAssignmentOperator(rightType);
return getRegularTypeOfObjectLiteral(rightType);
case SyntaxKind.CommaToken:
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left)) {
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isEvalNode(right)) {
error(left, Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects);
}
return rightType;
}
function isEvalNode(node: Expression) {
return node.kind === SyntaxKind.Identifier && (node as Identifier).text === "eval";
}
// Return true if there was no error, false if there was an error.
function checkForDisallowedESSymbolOperand(operator: SyntaxKind): boolean {
const offendingSymbolOperand =

View File

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

View File

@ -0,0 +1,9 @@
//// [evalAfter0.ts]
(0,eval)("10"); // fine: special case for eval
declare var eva;
(0,eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)
//// [evalAfter0.js]
(0, eval)("10"); // fine: special case for eval
(0, eva)("10"); // error: no side effect left of comma (suspect of missing method name or something)

View File

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