1
// Any copyright is dedicated to the Public Domain.
2
// http://creativecommons.org/licenses/publicdomain/
5
//-----------------------------------------------------------------------------
6
var BUGNUMBER = 514568;
7
var summary = "eval in all its myriad flavors";
9
print(BUGNUMBER + ": " + summary);
22
"function actX(action)" +
35
" try { return eval('delete x'); }" +
36
" catch (e) { return e.name; }" +
45
var inner1 = f("get");
49
var inner2 = f("get");
53
var inner3 = f("get");
56
var del = f("delete");
57
var inner4 = f("get");
61
var inner5 = f("get");
67
inner1: inner1, local1: local1,
68
inner2: inner2, local2: local2,
69
inner3: inner3, local3: local3,
71
inner4: inner4, local4: local4,
72
inner5: inner5, local5: local5,
75
assertEq(resultsX.local0, 17);
77
assertEq(resultsX.inner1, 4);
78
assertEq(resultsX.local1, 17);
80
assertEq(resultsX.inner2, 4);
81
assertEq(resultsX.local2, 7);
83
assertEq(resultsX.inner3, 9);
84
assertEq(resultsX.local3, 7);
86
assertEq(resultsX.del, "SyntaxError");
88
assertEq(resultsX.inner4, 9);
89
assertEq(resultsX.local4, 7);
91
assertEq(resultsX.inner5, 23);
92
assertEq(resultsX.local5, 7);
98
"function actY(action)" +
111
" try { return eval('delete y'); }" +
112
" catch (e) { return e.name; }" +
117
try { var local0 = y; } catch (e) { local0 = e.name; }
121
var inner1 = f("get");
122
try { var local1 = y; } catch (e) { local1 = e.name; }
124
try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
125
var inner2 = f("get");
126
try { var local2 = y; } catch (e) { local2 = e.name; }
129
var inner3 = f("get");
130
try { var local3 = y; } catch (e) { local3 = e.name; }
132
var del = f("delete");
133
try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
134
try { var local4 = y; } catch (e) { local4 = e.name; }
137
try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
138
try { var local5 = y; } catch (e) { local5 = e.name; }
143
inner1: inner1, local1: local1,
144
inner2: inner2, local2: local2,
145
inner3: inner3, local3: local3,
147
inner4: inner4, local4: local4,
148
inner5: inner5, local5: local5,
151
assertEq(resultsY.local0, "ReferenceError");
153
assertEq(resultsY.inner1, 5);
154
assertEq(resultsY.local1, "ReferenceError");
156
assertEq(resultsY.inner2, 5);
157
assertEq(resultsY.local2, "ReferenceError");
159
assertEq(resultsY.inner3, 2);
160
assertEq(resultsY.local3, "ReferenceError");
162
assertEq(resultsY.del, "SyntaxError");
164
assertEq(resultsY.inner4, 2);
165
assertEq(resultsY.local4, "ReferenceError");
167
assertEq(resultsY.inner5, 71);
168
assertEq(resultsY.local5, "ReferenceError");
170
/******************************************************************************/
172
if (typeof reportCompare === "function")
173
reportCompare(true, true);
175
print("Tests complete!");