Add a test for (eval)(code) being direct eval; also add tests for (1,eval)(code), (a?b:eval)(code), and so on (constant-folding expressions, at least before bug 537673) being indirect. r=lumpy

--HG--
extra : rebase_source : cfed63291a05d936ab76909fe68a0c92ee90d9cd
This commit is contained in:
Jeff Walden 2010-10-08 20:27:19 -07:00
parent 516e962572
commit ec6a82be0d
2 changed files with 69 additions and 0 deletions

View File

@ -3,3 +3,4 @@ script parseInt-01.js
script eval-01.js
script eval-02.js
script eval-inside-with-is-direct.js
script parenthesized-eval-is-direct.js

View File

@ -0,0 +1,68 @@
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/licenses/publicdomain/
//-----------------------------------------------------------------------------
print("(eval)(...) is a direct eval, (1, eval)() isn't, etc.");
/**************
* BEGIN TEST *
**************/
/*
* Justification:
*
* https://mail.mozilla.org/pipermail/es5-discuss/2010-October/003724.html
*
* Note also bug 537673.
*/
var t = "global";
function group()
{
var t = "local";
return (eval)("t");
}
assertEq(group(), "local");
function groupAndComma()
{
var t = "local";
return (1, eval)("t");
}
assertEq(groupAndComma(), "global");
function groupAndTrueTernary()
{
var t = "local";
return (true ? eval : null)("t");
}
assertEq(groupAndTrueTernary(), "global");
function groupAndEmptyStringTernary()
{
var t = "local";
return ("" ? null : eval)("t");
}
assertEq(groupAndEmptyStringTernary(), "global");
function groupAndZeroTernary()
{
var t = "local";
return (0 ? null : eval)("t");
}
assertEq(groupAndZeroTernary(), "global");
function groupAndNaNTernary()
{
var t = "local";
return (0 / 0 ? null : eval)("t");
}
assertEq(groupAndNaNTernary(), "global");
/******************************************************************************/
if (typeof reportCompare === "function")
reportCompare(true, true);
print("All tests passed!");