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!");
177 var successfullyParsed
= true;