|
1 var otherGlobal = newGlobal(); |
|
2 |
|
3 function test(str, arg, result) |
|
4 { |
|
5 arg = arg || 'ponies'; |
|
6 result = result || 'ponies'; |
|
7 |
|
8 var fun = new Function('x', str); |
|
9 |
|
10 var got = fun.toSource(); |
|
11 var expect = '(function anonymous(x) {\n' + str + '\n})'; |
|
12 if (got !== expect) { |
|
13 print("GOT: " + got); |
|
14 print("EXPECT: " + expect); |
|
15 assertEq(got, expect); |
|
16 } |
|
17 |
|
18 // test reflection logic |
|
19 Reflect.parse(got); |
|
20 |
|
21 // test xdr by cloning a cross-compartment function |
|
22 var code = "(function (x) { " + str + " })"; |
|
23 var c = clone(otherGlobal.evaluate(code, {compileAndGo: false})); |
|
24 assertEq(c.toSource(), eval(code).toSource()); |
|
25 |
|
26 var got = fun(arg); |
|
27 var expect = result; |
|
28 if (got !== expect) { |
|
29 print("GOT:" + got); |
|
30 print("EXPECT: " + expect); |
|
31 assertEq(got, expect); |
|
32 } |
|
33 } |
|
34 |
|
35 function isError(str) |
|
36 { |
|
37 var caught = false; |
|
38 try { |
|
39 new Function(str); |
|
40 } catch(e) { |
|
41 assertEq(String(e).indexOf('TypeError') == 0 || String(e).indexOf('SyntaxError') == 0, true); |
|
42 caught = true; |
|
43 } |
|
44 assertEq(caught, true); |
|
45 } |
|
46 |
|
47 // let expr |
|
48 test('return let (y) x;'); |
|
49 test('return let (x) "" + x;', 'unicorns', 'undefined'); |
|
50 test('return let (y = x) (y++, "" + y);', 'unicorns', 'NaN'); |
|
51 test('return let (y = 1) (y = x, y);'); |
|
52 test('return let ([] = x) x;'); |
|
53 test('return let (x = {a: x}) x.a;'); |
|
54 test('return let ({a: x} = {a: x}) x;'); |
|
55 test('return let ([x] = {0: x}) x;'); |
|
56 test('return let ({0: x} = [x]) x;'); |
|
57 test('return let ({0: []} = []) x;'); |
|
58 test('return let ([, ] = x) x;'); |
|
59 test('return let ([, , , , ] = x) x;'); |
|
60 test('return let ([[]] = x) x;'); |
|
61 test('return let ([[[[[[[[[[[[[]]]]]]]]]]]]] = x) x;'); |
|
62 test('return let ([[], []] = x) x;'); |
|
63 test('return let ([[[[]]], [], , [], [[]]] = x) x;'); |
|
64 test('return let ({x: []} = x) x;'); |
|
65 test('return let ({x: [], y: {x: []}} = x) "ponies";', {y:{}}); |
|
66 test('return let ({x: []} = x, [{x: []}] = x) "ponies";'); |
|
67 test('return let (x = x) x;'); |
|
68 test('return let (x = eval("x")) x;'); |
|
69 test('return let (x = (let (x = x + 1) x) + 1) x;', 1, 3); |
|
70 test('return let (x = (let (x = eval("x") + 1) eval("x")) + 1) eval("x");', 1, 3); |
|
71 test('return let (x = x + 1, y = x) y;'); |
|
72 test('return let (x = x + 1, [] = x, [[, , ]] = x, y = x) y;'); |
|
73 test('return let ([{a: x}] = x, [, {b: y}] = x) let (x = x + 1, y = y + 2) x + y;', [{a:"p"},{b:"p"}], "p1p2"); |
|
74 test('return let ([] = []) x;'); |
|
75 test('return let ([] = [x]) x;'); |
|
76 test('return let ([a] = (1, [x])) a;'); |
|
77 test('return let ([a] = (1, x, 1, x)) a;', ['ponies']); |
|
78 test('return let ([x] = [x]) x;'); |
|
79 test('return let ([[a, [b, c]]] = [[x, []]]) a;'); |
|
80 test('return let ([x, y] = [x, x + 1]) x + y;', 1, 3); |
|
81 test('return let ([x, y, z] = [x, x + 1, x + 2]) x + y + z;', 1, 6); |
|
82 test('return let ([[x]] = [[x]]) x;'); |
|
83 test('return let ([x, y] = [x, x + 1]) x;'); |
|
84 test('return let ([x, [y, z]] = [x, x + 1]) x;'); |
|
85 test('return let ([{x: [x]}, {y1: y, z1: z}] = [x, x + 1]) x;',{x:['ponies']}); |
|
86 test('return let (x = (3, x)) x;'); |
|
87 test('return let (x = x + "s") x;', 'ponie'); |
|
88 test('return let ([x] = (3, [x])) x;'); |
|
89 test('return let ([] = [[]] = {}) x;'); |
|
90 test('return let (y = x) function () {return eval("y");}();'); |
|
91 test('return eval("let (y = x) y");'); |
|
92 test('return let (y = x) (eval("var y = 2"), y);', 'ponies', 2); |
|
93 test('"use strict";return let (y = x) (eval("var y = 2"), y);'); |
|
94 test('this.y = x;return let (y = 1) this.eval("y");'); |
|
95 test('try {let (x = x) eval("throw x");} catch (e) {return e;}'); |
|
96 test('try {return let (x = eval("throw x")) x;} catch (e) {return e;}'); |
|
97 isError('let (x = 1, x = 2) x'); |
|
98 isError('let ([x, y] = a, {a:x} = b) x'); |
|
99 isError('let ([x, y, x] = a) x'); |
|
100 isError('let ([x, [y, [x]]] = a) x'); |
|
101 isError('let (x = function() { return x}) x()return x;'); |
|
102 isError('(let (x = function() { return x}) x())return x;'); |
|
103 |
|
104 // let block |
|
105 test('let (y) {return x;}'); |
|
106 test('let (y = x) {y++;return "" + y;}', 'unicorns', 'NaN'); |
|
107 test('let (y = 1) {y = x;return y;}'); |
|
108 test('let (x) {return "" + x;}', 'unicorns', 'undefined'); |
|
109 test('let ([] = x) {return x;}'); |
|
110 test('let (x) {}return x;'); |
|
111 test('let (x = {a: x}) {return x.a;}'); |
|
112 test('let ({a: x} = {a: x}) {return x;}'); |
|
113 test('let ([x] = {0: x}) {return x;}'); |
|
114 test('let ({0: x} = [x]) {return x;}'); |
|
115 test('let ({0: []} = []) {return x;}'); |
|
116 test('let ([, ] = x) {return x;}'); |
|
117 test('let ([, , , , ] = x) {return x;}'); |
|
118 test('let ([[]] = x) {return x;}'); |
|
119 test('let ([[[[[[[[[[[[[]]]]]]]]]]]]] = x) {return x;}'); |
|
120 test('let ([[], []] = x) {return x;}'); |
|
121 test('let ([[[[]]], [], , [], [[]]] = x) {return x;}'); |
|
122 test('let ({x: []} = x) {return x;}'); |
|
123 test('let ({x: [], y: {x: []}} = x) {return "ponies";}', {y:{}}); |
|
124 test('let ({x: []} = x, [{x: []}] = x) {return "ponies";}'); |
|
125 test('let (x = x) {return x;}'); |
|
126 test('let (x = eval("x")) {return x;}'); |
|
127 test('let (x = (let (x = x + 1) x) + 1) {return x;}', 1, 3); |
|
128 test('let (x = (let (x = eval("x") + 1) eval("x")) + 1) {return eval("x");}', 1, 3); |
|
129 test('let (x = x + 1, y = x) {return y;}'); |
|
130 test('let (x = x + 1, [] = x, [[, , ]] = x, y = x) {return y;}'); |
|
131 test('let ([{a: x}] = x, [, {b: y}] = x) {let (x = x + 1, y = y + 2) {return x + y;}}', [{a:"p"},{b:"p"}], "p1p2"); |
|
132 test('let ([] = []) {return x;}'); |
|
133 test('let ([] = [x]) {return x;}'); |
|
134 test('let ([a] = (1, [x])) {return a;}'); |
|
135 test('let ([a] = (1, x, 1, x)) {return a;}', ['ponies']); |
|
136 test('let ([x] = [x]) {return x;}'); |
|
137 test('let ([[a, [b, c]]] = [[x, []]]) {return a;}'); |
|
138 test('let ([x, y] = [x, x + 1]) {return x + y;}', 1, 3); |
|
139 test('let ([x, y, z] = [x, x + 1, x + 2]) {return x + y + z;}', 1, 6); |
|
140 test('let ([[x]] = [[x]]) {return x;}'); |
|
141 test('let ([x, y] = [x, x + 1]) {return x;}'); |
|
142 test('let ([x, [y, z]] = [x, x + 1]) {return x;}'); |
|
143 test('let ([{x: [x]}, {y1: y, z1: z}] = [x, x + 1]) {return x;}',{x:['ponies']}); |
|
144 test('let (y = x[1]) {let (x = x[0]) {try {let (y = "unicorns") {throw y;}} catch (e) {return x + y;}}}', ['pon','ies']); |
|
145 test('let (x = x) {try {let (x = "unicorns") eval("throw x");} catch (e) {return x;}}'); |
|
146 test('let ([] = [[]] = {}) {return x;}'); |
|
147 test('let (y = x) {return function () {return eval("y");}();}'); |
|
148 test('return eval("let (y = x) {y;}");'); |
|
149 test('let (y = x) {eval("var y = 2");return y;}', 'ponies', 2); |
|
150 test('"use strict";let (y = x) {eval("var y = 2");return y;}'); |
|
151 test('this.y = x;let (y = 1) {return this.eval("y");}'); |
|
152 isError('let (x = 1, x = 2) {x}'); |
|
153 isError('let ([x, y] = a, {a:x} = b) {x}'); |
|
154 isError('let ([x, y, x] = a) {x}'); |
|
155 isError('let ([x, [y, [x]]] = a) {x}'); |
|
156 |
|
157 // var declarations |
|
158 test('var y;return x;'); |
|
159 test('var y = x;return x;'); |
|
160 test('var [] = x;return x;'); |
|
161 test('var [, ] = x;return x;'); |
|
162 test('var [, , , , ] = x;return x;'); |
|
163 test('var [[]] = x;return x;'); |
|
164 test('var [[[[[[[[[[[[[]]]]]]]]]]]]] = x;return x;'); |
|
165 test('var [[], []] = x;return x;'); |
|
166 test('var [[[[]]], [], , [], [[]]] = x;return x;'); |
|
167 test('var {x: []} = x;return x;'); |
|
168 test('var {x: [], y: {x: []}} = x;return "ponies";', {y:{}}); |
|
169 test('var {x: []} = x, [{x: []}] = x;return "ponies";'); |
|
170 test('var x = x;return x;'); |
|
171 test('var y = y;return "" + y;', 'unicorns', 'undefined'); |
|
172 test('var x = eval("x");return x;'); |
|
173 test('var x = (let (x = x + 1) x) + 1;return x;', 1, 3); |
|
174 test('var x = (let (x = eval("x") + 1) eval("x")) + 1;return eval("x");', 1, 3); |
|
175 test('var X = x + 1, y = x;return y;'); |
|
176 test('var X = x + 1, [] = X, [[, , ]] = X, y = x;return y;'); |
|
177 test('var [{a: X}] = x, [, {b: y}] = x;var X = X + 1, y = y + 2;return X + y;', [{a:"p"},{b:"p"}], "p1p2"); |
|
178 test('var [x] = [x];return x;'); |
|
179 test('var [[a, [b, c]]] = [[x, []]];return a;'); |
|
180 test('var [y] = [x];return y;'); |
|
181 test('var [a] = (1, [x]);return a;'); |
|
182 test('var [a] = (1, x, 1, x);return a;', ['ponies']); |
|
183 test('var [x, y] = [x, x + 1];return x + y;', 1, 3); |
|
184 test('var [x, y, z] = [x, x + 1, x + 2];return x + y + z;', 1, 6); |
|
185 test('var [[x]] = [[x]];return x;'); |
|
186 test('var [x, y] = [x, x + 1];return x;'); |
|
187 test('var [x, [y, z]] = [x, x + 1];return x;'); |
|
188 test('var [{x: [x]}, {y1: y, z1: z}] = [x, x + 1];return x;',{x:['ponies']}); |
|
189 test('var [] = [[]] = {};return x;'); |
|
190 test('if (x) {var y = x;return x;}'); |
|
191 test('if (x) {y = x;var y = y;return y;}'); |
|
192 test('if (x) {var z = y;var [y] = x;z += y;}return z;', ['-'], 'undefined-'); |
|
193 |
|
194 // let declaration in context |
|
195 test('if (x) {let y;return x;}'); |
|
196 test('if (x) {let x;return "" + x;}', 'unicorns', 'undefined'); |
|
197 test('if (x) {let y = x;return x;}'); |
|
198 test('if (x) {y = x;let y = y;return y;}'); |
|
199 test('if (x) {var z = y;let [y] = x;z += y;}return z;', ['-'], 'undefined-'); |
|
200 test('if (x) {let y = x;return x;}'); |
|
201 test('if (x) {let [] = x;return x;}'); |
|
202 test('if (x) {let [, ] = x;return x;}'); |
|
203 test('if (x) {let [, , , , ] = x;return x;}'); |
|
204 test('if (x) {let [[]] = x;return x;}'); |
|
205 test('if (x) {let [[[[[[[[[[[[[]]]]]]]]]]]]] = x;return x;}'); |
|
206 test('if (x) {let [[], []] = x;return x;}'); |
|
207 test('if (x) {let [[[[]]], [], , [], [[]]] = x;return x;}'); |
|
208 test('if (x) {let {x: []} = x;return x;}'); |
|
209 test('if (x) {let {x: [], y: {x: []}} = x;return "ponies";}', {y:{}}); |
|
210 test('if (x) {let {x: []} = x, [{x: []}] = x;return "ponies";}'); |
|
211 test('if (x) {let x = x;return "" + x;}', 'unicorns', 'undefined'); |
|
212 test('if (x) {let y = y;return "" + y;}', 'unicorns', 'undefined'); |
|
213 test('if (x) {let x = eval("x");return "" + x;}', 'unicorns', 'undefined'); |
|
214 test('if (x) {let y = (let (x = x + 1) x) + 1;return y;}', 1, 3); |
|
215 test('if (x) {let y = (let (x = eval("x") + 1) eval("x")) + 1;return eval("y");}', 1, 3); |
|
216 test('if (x) {let X = x + 1, y = x;return y;}'); |
|
217 test('if (x) {let X = x + 1, [] = X, [[, , ]] = X, y = x;return y;}'); |
|
218 test('if (x) {let [{a: X}] = x, [, {b: Y}] = x;var XX = X + 1, YY = Y + 2;return XX + YY;}', [{a:"p"},{b:"p"}], "p1p2"); |
|
219 test('if (x) {let [[a, [b, c]]] = [[x, []]];return a;}'); |
|
220 test('if (x) {let [X] = [x];return X;}'); |
|
221 test('if (x) {let [y] = [x];return y;}'); |
|
222 test('if (x) {let [a] = (1, [x]);return a;}'); |
|
223 test('if (x) {let [a] = (1, x, 1, x);return a;}', ['ponies']); |
|
224 test('if (x) {let [X, y] = [x, x + 1];return X + y;}', 1, 3); |
|
225 test('if (x) {let [X, y, z] = [x, x + 1, x + 2];return X + y + z;}', 1, 6); |
|
226 test('if (x) {let [[X]] = [[x]];return X;}'); |
|
227 test('if (x) {let [X, y] = [x, x + 1];return X;}'); |
|
228 test('if (x) {let [X, [y, z]] = [x, x + 1];return X;}'); |
|
229 test('if (x) {let [{x: [X]}, {y1: y, z1: z}] = [x, x + 1];return X;}',{x:['ponies']}); |
|
230 test('if (x) {let y = x;try {let x = 1;throw 2;} catch (e) {return y;}}'); |
|
231 test('if (x) {let [] = [[]] = {};return x;}'); |
|
232 test('let (y, [] = x) {}try {let a = b(), b;} catch (e) {return x;}'); |
|
233 test('try {let x = 1;throw 2;} catch (e) {return x;}'); |
|
234 test('let (y = x) {let x;return y;}'); |
|
235 test('let (y = x) {let x = y;return x;}'); |
|
236 test('let ([y, z] = x) {let a = x, b = y;return a;}'); |
|
237 test('let ([y, z] = x, a = x, [] = x) {let b = x, c = y;return a;}'); |
|
238 test('function f() {return unicorns;}try {let (x = 1) {let a, b;f();}} catch (e) {return x;}'); |
|
239 test('function f() {return unicorns;}try {let (x = 1) {let a, b;}f();} catch (e) {return x;}'); |
|
240 test('x.foo;{let y = x;return y;}'); |
|
241 test('x.foo;if (x) {x.bar;let y = x;return y;}'); |
|
242 test('if (x) {let y = x;return function () {return eval("y");}();}'); |
|
243 test('return eval("let y = x; y");'); |
|
244 test('if (x) {let y = x;eval("var y = 2");return y;}', 'ponies', 2); |
|
245 test('"use strict";if (x) {let y = x;eval("var y = 2");return y;}'); |
|
246 test('"use strict";if (x) {let y = x;eval("let y = 2");return y;}'); |
|
247 test('"use strict";if (x) {let y = 1;return eval("let y = x;y;");}'); |
|
248 test('this.y = x;if (x) {let y = 1;return this.eval("y");}'); |
|
249 isError('if (x) {let (x = 1, x = 2) {x}}'); |
|
250 isError('if (x) {let ([x, y] = a, {a:x} = b) {x}}'); |
|
251 isError('if (x) {let ([x, y, x] = a) {x}}'); |
|
252 isError('if (x) {let ([x, [y, [x]]] = a) {x}}'); |
|
253 isError('let ([x, y] = x) {let x;}'); |
|
254 |
|
255 // for(;;) |
|
256 test('for (;;) {return x;}'); |
|
257 test('for (let y = 1;;) {return x;}'); |
|
258 test('for (let y = 1;; ++y) {return x;}'); |
|
259 test('for (let y = 1; ++y;) {return x;}'); |
|
260 test('for (let (x = 1) x; x != 1; ++x) {return x;}'); |
|
261 test('for (let [, {a: [], b: []}] = x, [] = x; x;) {return x;}'); |
|
262 test('for (let x = 1, [y, z] = x, a = x; z < 4; ++z) {return x + y;}', [2,3], 3); |
|
263 test('for (let (x = 1, [{a: b, c: d}] = [{a: 1, c: 2}]) x; x != 1; ++x) {return x;}'); |
|
264 test('for (let [[a, [b, c]]] = [[x, []]];;) {return a;}'); |
|
265 test('var sum = 0;for (let y = x; y < 4; ++y) {sum += y;}return sum;', 1, 6); |
|
266 test('var sum = 0;for (let x = x, y = 10; x < 4; ++x) {sum += x;}return sum;', 1, 6); |
|
267 test('var sum = 0;for (let x = x; x < 4; ++x) {sum += x;}return x;', 1, 1); |
|
268 test('var sum = 0;for (let x = eval("x"); x < 4; ++x) {sum += x;}return sum;', 1, 6); |
|
269 test('var sum = 0;for (let x = x; eval("x") < 4; ++x) {sum += eval("x");}return sum;', 1, 6); |
|
270 test('var sum = 0;for (let x = eval("x"); eval("x") < 4; ++x) {sum += eval("x");}return sum;', 1, 6); |
|
271 test('for (var y = 1;;) {return x;}'); |
|
272 test('for (var y = 1;; ++y) {return x;}'); |
|
273 test('for (var y = 1; ++y;) {return x;}'); |
|
274 test('for (var [, {a: [], b: []}] = x, [] = x; x;) {return x;}'); |
|
275 test('for (var X = 1, [y, z] = x, a = x; z < 4; ++z) {return X + y;}', [2,3], 3); |
|
276 test('var sum = 0;for (var y = x; y < 4; ++y) {sum += y;}return sum;', 1, 6); |
|
277 test('var sum = 0;for (var X = x, y = 10; X < 4; ++X) {sum += X;}return sum;', 1, 6); |
|
278 test('var sum = 0;for (var X = x; X < 4; ++X) {sum += X;}return x;', 1, 1); |
|
279 test('var sum = 0;for (var X = eval("x"); X < 4; ++X) {sum += X;}return sum;', 1, 6); |
|
280 test('var sum = 0;for (var X = x; eval("X") < 4; ++X) {sum += eval("X");}return sum;', 1, 6); |
|
281 test('var sum = 0;for (var X = eval("x"); eval("X") < 4; ++X) {sum += eval("X");}return sum;', 1, 6); |
|
282 test('try {for (let x = eval("throw x");;) {}} catch (e) {return e;}'); |
|
283 test('try {for (let x = x + "s"; eval("throw x");) {}} catch (e) {return e;}', 'ponie'); |
|
284 test('for (let y = x;;) {let x;return y;}'); |
|
285 test('for (let y = x;;) {let y;return x;}'); |
|
286 test('for (let y;;) {let y;return x;}'); |
|
287 test('for (let a = x;;) {let c = x, d = x;return c;}'); |
|
288 test('for (let [a, b] = x;;) {let c = x, d = x;return c;}'); |
|
289 test('for (let [] = [[]] = {};;) {return x;}'); |
|
290 test('for (let [a] = (1, [x]);;) {return a;}'); |
|
291 test('for (let [a] = (1, x, 1, x);;) {return a;}', ['ponies']); |
|
292 isError('for (let x = 1, x = 2;;) {}'); |
|
293 isError('for (let [x, y] = a, {a:x} = b;;) {}'); |
|
294 isError('for (let [x, y, x] = a;;) {}'); |
|
295 isError('for (let [x, [y, [x]]] = a;;) {}'); |
|
296 |
|
297 // for(in) |
|
298 test('for (let i in x) {return x;}'); |
|
299 test('for (let i in x) {let y;return x;}'); |
|
300 test('for each (let [a, b] in x) {let y;return x;}'); |
|
301 test('for (let i in x) {let (i = x) {return i;}}'); |
|
302 test('for (let i in x) {let i = x;return i;}'); |
|
303 test('for each (let [x, y] in x) {return x + y;}', [['ponies', '']]); |
|
304 test('for each (let [{0: x, 1: y}, z] in x) {return x + y + z;}', [[['po','nies'], '']]); |
|
305 test('var s = "";for (let a in x) {for (let b in x) {s += a + b;}}return s;', [1,2], '00011011'); |
|
306 test('var res = "";for (let i in x) {res += x[i];}return res;'); |
|
307 test('var res = "";for (var i in x) {res += x[i];}return res;'); |
|
308 test('for each (let {x: y, y: x} in [{x: x, y: x}]) {return y;}'); |
|
309 test('for (let x in eval("x")) {return x;}', {ponies:true}); |
|
310 test('for (let x in x) {return eval("x");}', {ponies:true}); |
|
311 test('for (let x in eval("x")) {return eval("x");}', {ponies:true}); |
|
312 test('for ((let (x = {y: true}) x).y in eval("x")) {return eval("x");}'); |
|
313 test('for (let i in x) {break;}return x;'); |
|
314 test('for (let i in x) {break;}return eval("x");'); |
|
315 test('for (let x in x) {break;}return x;'); |
|
316 test('for (let x in x) {break;}return eval("x");'); |
|
317 test('a:for (let i in x) {for (let j in x) {break a;}}return x;'); |
|
318 test('a:for (let i in x) {for (let j in x) {break a;}}return eval("x");'); |
|
319 test('var j;for (let i in x) {j = i;break;}return j;', {ponies:true}); |
|
320 test('try {for (let x in eval("throw x")) {}} catch (e) {return e;}'); |
|
321 test('try {for each (let x in x) {eval("throw x");}} catch (e) {return e;}', ['ponies']); |
|
322 isError('for (let [x, x] in o) {}'); |
|
323 isError('for (let [x, y, x] in o) {}'); |
|
324 isError('for (let [x, [y, [x]]] in o) {}'); |
|
325 |
|
326 // genexps |
|
327 test('return (i for (i in x)).next();', {ponies:true}); |
|
328 test('return (eval("i") for (i in x)).next();', {ponies:true}); |
|
329 test('return (eval("i") for (i in eval("x"))).next();', {ponies:true}); |
|
330 test('try {return (eval("throw i") for (i in x)).next();} catch (e) {return e;}', {ponies:true}); |
|
331 |
|
332 // array comprehension |
|
333 test('return [i for (i in x)][0];', {ponies:true}); |
|
334 test('return [eval("i") for (i in x)][0];', {ponies:true}); |
|
335 test('return [eval("i") for (i in eval("x"))][0];', {ponies:true}); |
|
336 test('try {return [eval("throw i") for (i in x)][0];} catch (e) {return e;}', {ponies:true}); |
|
337 |
|
338 // don't forget about switch craziness |
|
339 test('var y = 3;switch (function () {return eval("y");}()) {case 3:let y;return x;default:;}'); |
|
340 test('switch (x) {case 3:let y;return 3;case 4:let z;return 4;default:return x;}'); |
|
341 test('switch (x) {case 3:let x;break;default:if (x === undefined) {return "ponies";}}'); |
|
342 test('switch (x) {case 3:default:let y;let (y = x) {return y;}}'); |
|
343 isError('switch (x) {case 3:let y;return 3;case 4:let y;return 4;default:;}'); |