Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(278)

Side by Side Diff: test/debugger/debug/debug-scopes-suspended-generators.js

Issue 2902423002: Revert of Make non-Module generators only context allocate parameters. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --ignition --turbo 5 // Flags: --ignition --turbo
6 // The functions used for testing backtraces. They are at the top to make the 6 // The functions used for testing backtraces. They are at the top to make the
7 // testing of source line/column easier. 7 // testing of source line/column easier.
8 8
9 var Debug = debug.Debug; 9 var Debug = debug.Debug;
10 10
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 100 }
101 101
102 // Simple empty closure scope. 102 // Simple empty closure scope.
103 103
104 function *gen1() { 104 function *gen1() {
105 yield 1; 105 yield 1;
106 return 2; 106 return 2;
107 } 107 }
108 108
109 var g = gen1(); 109 var g = gen1();
110 CheckScopeChain([debug.ScopeType.Local, 110 CheckScopeChain([debug.ScopeType.Closure,
111 debug.ScopeType.Script, 111 debug.ScopeType.Script,
112 debug.ScopeType.Global], g); 112 debug.ScopeType.Global], g);
113 CheckScopeContent({}, 0, g); 113 CheckScopeContent({}, 0, g);
114 114
115 // Closure scope with a parameter. 115 // Closure scope with a parameter.
116 116
117 function *gen2(a) { 117 function *gen2(a) {
118 yield a; 118 yield a;
119 return 2; 119 return 2;
120 } 120 }
121 121
122 g = gen2(42); 122 g = gen2(42);
123 CheckScopeChain([debug.ScopeType.Local, 123 CheckScopeChain([debug.ScopeType.Closure,
124 debug.ScopeType.Script, 124 debug.ScopeType.Script,
125 debug.ScopeType.Global], g); 125 debug.ScopeType.Global], g);
126 CheckScopeContent({a: 42}, 0, g); 126 CheckScopeContent({a: 42}, 0, g);
127 127
128 // Closure scope with a parameter. 128 // Closure scope with a parameter.
129 129
130 function *gen3(a) { 130 function *gen3(a) {
131 var b = 1 131 var b = 1
132 yield a; 132 yield a;
133 return b; 133 return b;
134 } 134 }
135 135
136 g = gen3(0); 136 g = gen3(0);
137 CheckScopeChain([debug.ScopeType.Local, 137 CheckScopeChain([debug.ScopeType.Closure,
138 debug.ScopeType.Script, 138 debug.ScopeType.Script,
139 debug.ScopeType.Global], g); 139 debug.ScopeType.Global], g);
140 CheckScopeContent({a: 0, b: undefined}, 0, g); 140 CheckScopeContent({a: 0, b: undefined}, 0, g);
141 141
142 g.next(); // Create b. 142 g.next(); // Create b.
143 CheckScopeContent({a: 0, b: 1}, 0, g); 143 CheckScopeContent({a: 0, b: 1}, 0, g);
144 144
145 // Closure scope with a parameter. 145 // Closure scope with a parameter.
146 146
147 function *gen4(a, b) { 147 function *gen4(a, b) {
148 var x = 2; 148 var x = 2;
149 yield a; 149 yield a;
150 var y = 3; 150 var y = 3;
151 yield a;
152 return b; 151 return b;
153 } 152 }
154 153
155 g = gen4(0, 1); 154 g = gen4(0, 1);
156 CheckScopeChain([debug.ScopeType.Local, 155 CheckScopeChain([debug.ScopeType.Closure,
157 debug.ScopeType.Script, 156 debug.ScopeType.Script,
158 debug.ScopeType.Global], g); 157 debug.ScopeType.Global], g);
159 CheckScopeContent({a: 0, b: 1, x: undefined, y: undefined}, 0, g); 158 CheckScopeContent({a: 0, b: 1, x: undefined, y: undefined}, 0, g);
160 159
161 g.next(); // Create x. 160 g.next(); // Create x.
162 CheckScopeContent({a: 0, b: 1, x: 2, y: undefined}, 0, g); 161 CheckScopeContent({a: 0, b: 1, x: 2, y: undefined}, 0, g);
163 162
164 g.next(); // Create y. 163 g.next(); // Create y.
165 CheckScopeContent({a: 0, b: 1, x: 2, y: 3}, 0, g); 164 CheckScopeContent({a: 0, b: 1, x: 2, y: 3}, 0, g);
166 165
167 // Closure introducing local variable using eval. 166 // Closure introducing local variable using eval.
168 167
169 function *gen5(a) { 168 function *gen5(a) {
170 eval('var b = 2'); 169 eval('var b = 2');
171 yield a;
172 return b; 170 return b;
173 } 171 }
174 172
175 g = gen5(1); 173 g = gen5(1);
176 g.next(); 174 g.next();
177 CheckScopeChain([debug.ScopeType.Local, 175 CheckScopeChain([debug.ScopeType.Closure,
178 debug.ScopeType.Script, 176 debug.ScopeType.Script,
179 debug.ScopeType.Global], g); 177 debug.ScopeType.Global], g);
180 CheckScopeContent({a: 1, b: 2}, 0, g); 178 CheckScopeContent({a: 1, b: 2}, 0, g);
181 179
182 // Single empty with block. 180 // Single empty with block.
183 181
184 function *gen6() { 182 function *gen6() {
185 with({}) { 183 with({}) {
186 yield 1; 184 yield 1;
187 } 185 }
188 yield 2; 186 yield 2;
189 return 3; 187 return 3;
190 } 188 }
191 189
192 g = gen6(); 190 g = gen6();
193 g.next(); 191 g.next();
194 CheckScopeChain([debug.ScopeType.With, 192 CheckScopeChain([debug.ScopeType.With,
195 debug.ScopeType.Local, 193 debug.ScopeType.Closure,
196 debug.ScopeType.Script, 194 debug.ScopeType.Script,
197 debug.ScopeType.Global], g); 195 debug.ScopeType.Global], g);
198 CheckScopeContent({}, 0, g); 196 CheckScopeContent({}, 0, g);
199 197
200 g.next(); 198 g.next();
201 CheckScopeChain([debug.ScopeType.Local, 199 CheckScopeChain([debug.ScopeType.Closure,
202 debug.ScopeType.Script, 200 debug.ScopeType.Script,
203 debug.ScopeType.Global], g); 201 debug.ScopeType.Global], g);
204 202
205 // Nested empty with blocks. 203 // Nested empty with blocks.
206 204
207 function *gen7() { 205 function *gen7() {
208 with({}) { 206 with({}) {
209 with({}) { 207 with({}) {
210 yield 1; 208 yield 1;
211 } 209 }
212 yield 2; 210 yield 2;
213 } 211 }
214 return 3; 212 return 3;
215 } 213 }
216 214
217 g = gen7(); 215 g = gen7();
218 g.next(); 216 g.next();
219 CheckScopeChain([debug.ScopeType.With, 217 CheckScopeChain([debug.ScopeType.With,
220 debug.ScopeType.With, 218 debug.ScopeType.With,
221 debug.ScopeType.Local, 219 debug.ScopeType.Closure,
222 debug.ScopeType.Script, 220 debug.ScopeType.Script,
223 debug.ScopeType.Global], g); 221 debug.ScopeType.Global], g);
224 CheckScopeContent({}, 0, g); 222 CheckScopeContent({}, 0, g);
225 223
226 // Nested with blocks using in-place object literals. 224 // Nested with blocks using in-place object literals.
227 225
228 function *gen8() { 226 function *gen8() {
229 with({a: 1,b: 2}) { 227 with({a: 1,b: 2}) {
230 with({a: 2,b: 1}) { 228 with({a: 2,b: 1}) {
231 yield a; 229 yield a;
232 } 230 }
233 yield a; 231 yield a;
234 } 232 }
235 return 3; 233 return 3;
236 } 234 }
237 235
238 g = gen8(); 236 g = gen8();
239 g.next(); 237 g.next();
240 CheckScopeChain([debug.ScopeType.With, 238 CheckScopeChain([debug.ScopeType.With,
241 debug.ScopeType.With, 239 debug.ScopeType.With,
242 debug.ScopeType.Local, 240 debug.ScopeType.Closure,
243 debug.ScopeType.Script, 241 debug.ScopeType.Script,
244 debug.ScopeType.Global], g); 242 debug.ScopeType.Global], g);
245 CheckScopeContent({a: 2, b: 1}, 0, g); 243 CheckScopeContent({a: 2, b: 1}, 0, g);
246 244
247 g.next(); 245 g.next();
248 CheckScopeContent({a: 1, b: 2}, 0, g); 246 CheckScopeContent({a: 1, b: 2}, 0, g);
249 247
250 // Catch block. 248 // Catch block.
251 249
252 function *gen9() { 250 function *gen9() {
253 try { 251 try {
254 throw 42; 252 throw 42;
255 } catch (e) { 253 } catch (e) {
256 yield e; 254 yield e;
257 } 255 }
258 return 3; 256 return 3;
259 } 257 }
260 258
261 g = gen9(); 259 g = gen9();
262 g.next(); 260 g.next();
263 CheckScopeChain([debug.ScopeType.Catch, 261 CheckScopeChain([debug.ScopeType.Catch,
264 debug.ScopeType.Local, 262 debug.ScopeType.Closure,
265 debug.ScopeType.Script, 263 debug.ScopeType.Script,
266 debug.ScopeType.Global], g); 264 debug.ScopeType.Global], g);
267 CheckScopeContent({e: 42}, 0, g); 265 CheckScopeContent({e: 42}, 0, g);
268 266
269 // For statement with block scope. 267 // For statement with block scope.
270 268
271 function *gen10() { 269 function *gen10() {
272 for (let i = 0; i < 42; i++) yield i; 270 for (let i = 0; i < 42; i++) yield i;
273 return 3; 271 return 3;
274 } 272 }
275 273
276 g = gen10(); 274 g = gen10();
277 g.next(); 275 g.next();
278 CheckScopeChain([debug.ScopeType.Block, 276 CheckScopeChain([debug.ScopeType.Block,
279 debug.ScopeType.Local, 277 debug.ScopeType.Block,
278 debug.ScopeType.Closure,
280 debug.ScopeType.Script, 279 debug.ScopeType.Script,
281 debug.ScopeType.Global], g); 280 debug.ScopeType.Global], g);
282 CheckScopeContent({i: 0}, 0, g); 281 CheckScopeContent({i: 0}, 0, g);
283 282
284 g.next(); 283 g.next();
285 CheckScopeContent({i: 1}, 0, g); 284 CheckScopeContent({i: 1}, 0, g);
285 CheckScopeContent({i: 0}, 1, g); // Additional block scope with i = 0;
286 286
287 // Nested generators. 287 // Nested generators.
288 288
289 var gen12; 289 var gen12;
290 function *gen11() { 290 function *gen11() {
291 var b = 2;
292 gen12 = function*() { 291 gen12 = function*() {
293 var a = 1; 292 var a = 1;
294 yield 1; 293 yield 1;
295 return b; 294 return 2;
296 }(); 295 }();
297 296
298 var a = 0; 297 var a = 0;
299 yield* gen12; 298 yield* gen12;
300 } 299 }
301 300
302 gen11().next(); 301 gen11().next();
303 g = gen12; 302 g = gen12;
304 303
305 CheckScopeChain([debug.ScopeType.Local, 304 CheckScopeChain([debug.ScopeType.Closure,
306 debug.ScopeType.Closure, 305 debug.ScopeType.Closure,
307 debug.ScopeType.Script, 306 debug.ScopeType.Script,
308 debug.ScopeType.Global], g); 307 debug.ScopeType.Global], g);
309 CheckScopeContent({a: 1}, 0, g); 308 CheckScopeContent({a: 1}, 0, g);
310 CheckScopeContent({b: 2}, 1, g); 309 CheckScopeContent({a: 0}, 1, g);
311 310
312 // Set a variable in an empty scope. 311 // Set a variable in an empty scope.
313 312
314 function *gen13() { 313 function *gen13() {
315 yield 1; 314 yield 1;
316 return 2; 315 return 2;
317 } 316 }
318 317
319 var g = gen13(); 318 var g = gen13();
320 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("a", 42)); 319 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("a", 42));
(...skipping 28 matching lines...) Expand all
349 var e = 5; 348 var e = 5;
350 } 349 }
351 yield e; 350 yield e;
352 return e; 351 return e;
353 } 352 }
354 353
355 var g = gen15(); 354 var g = gen15();
356 assertEquals(1, g.next().value); 355 assertEquals(1, g.next().value);
357 356
358 CheckScopeChain([debug.ScopeType.With, 357 CheckScopeChain([debug.ScopeType.With,
359 debug.ScopeType.Local, 358 debug.ScopeType.Closure,
360 debug.ScopeType.Script, 359 debug.ScopeType.Script,
361 debug.ScopeType.Global], g); 360 debug.ScopeType.Global], g);
362 CheckScopeContent({a: 1, b: 2}, 0, g); 361 CheckScopeContent({a: 1, b: 2}, 0, g);
363 CheckScopeContent({c: 3, d: 4, e: undefined}, 1, g); 362 CheckScopeContent({c: 3, d: 4, e: undefined}, 1, g);
364 363
365 // Variables don't exist in given scope. 364 // Variables don't exist in given scope.
366 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("c", 42)); 365 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("c", 42));
367 assertThrows(() => Debug.generatorScope(g, 1).setVariableValue("a", 42)); 366 assertThrows(() => Debug.generatorScope(g, 1).setVariableValue("a", 42));
368 367
369 // Variables in with scope are immutable. 368 // Variables in with scope are immutable.
370 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("a", 3)); 369 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("a", 3));
371 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("b", 3)); 370 assertThrows(() => Debug.generatorScope(g, 0).setVariableValue("b", 3));
372 371
373 Debug.generatorScope(g, 1).setVariableValue("c", 1); 372 Debug.generatorScope(g, 1).setVariableValue("c", 1);
374 Debug.generatorScope(g, 1).setVariableValue("e", 42); 373 Debug.generatorScope(g, 1).setVariableValue("e", 42);
375 374
376 CheckScopeContent({a: 1, b: 2}, 0, g); 375 CheckScopeContent({a: 1, b: 2}, 0, g);
377 CheckScopeContent({c: 1, d: 4, e: 42}, 1, g); 376 CheckScopeContent({c: 1, d: 4, e: 42}, 1, g);
378 assertEquals(5, g.next().value); // Initialized after set. 377 assertEquals(5, g.next().value); // Initialized after set.
379 378
380 CheckScopeChain([debug.ScopeType.Local, 379 CheckScopeChain([debug.ScopeType.Closure,
381 debug.ScopeType.Script, 380 debug.ScopeType.Script,
382 debug.ScopeType.Global], g); 381 debug.ScopeType.Global], g);
383 382
384 Debug.generatorScope(g, 0).setVariableValue("e", 42); 383 Debug.generatorScope(g, 0).setVariableValue("e", 42);
385 384
386 CheckScopeContent({c: 1, d: 4, e: 42}, 0, g); 385 CheckScopeContent({c: 1, d: 4, e: 42}, 0, g);
387 assertEquals(42, g.next().value); 386 assertEquals(42, g.next().value);
388 387
389 // Set a variable in nested with blocks using in-place object literals plus a 388 // Set a variable in nested with blocks using in-place object literals plus a
390 // nested block scope. 389 // nested block scope.
391 390
392 function *gen16() { 391 function *gen16() {
393 var c = 3; 392 var c = 3;
394 with({a: 1,b: 2}) { 393 with({a: 1,b: 2}) {
395 let d = 4; 394 let d = 4;
396 yield a; 395 yield a;
397 let e = 5; 396 let e = 5;
398 yield d; 397 yield d;
399 } 398 }
400 return 3; 399 return 3;
401 } 400 }
402 401
403 var g = gen16(); 402 var g = gen16();
404 g.next(); 403 g.next();
405 404
406 CheckScopeChain([debug.ScopeType.Block, 405 CheckScopeChain([debug.ScopeType.Block,
407 debug.ScopeType.With, 406 debug.ScopeType.With,
408 debug.ScopeType.Local, 407 debug.ScopeType.Closure,
409 debug.ScopeType.Script, 408 debug.ScopeType.Script,
410 debug.ScopeType.Global], g); 409 debug.ScopeType.Global], g);
411 CheckScopeContent({d: 4, e: undefined}, 0, g); 410 CheckScopeContent({d: 4}, 0, g);
412 CheckScopeContent({a: 1, b: 2}, 1, g); 411 CheckScopeContent({a: 1, b: 2}, 1, g);
413 CheckScopeContent({c: 3}, 2, g); 412 CheckScopeContent({c: 3}, 2, g);
414 413
415 Debug.generatorScope(g, 0).setVariableValue("d", 1); 414 Debug.generatorScope(g, 0).setVariableValue("d", 1);
416 CheckScopeContent({d: 1, e: undefined}, 0, g); 415 CheckScopeContent({d: 1}, 0, g);
417 416
418 assertEquals(1, g.next().value); 417 assertEquals(1, g.next().value);
419 418
420 // Set variable in catch block. 419 // Set variable in catch block.
421 420
422 var yyzyzzyz = 4829; 421 var yyzyzzyz = 4829;
423 let xxxyyxxyx = 42284; 422 let xxxyyxxyx = 42284;
424 function *gen17() { 423 function *gen17() {
425 try { 424 try {
426 throw 42; 425 throw 42;
427 } catch (e) { 426 } catch (e) {
428 yield e; 427 yield e;
429 yield e; 428 yield e;
430 } 429 }
431 return 3; 430 return 3;
432 } 431 }
433 432
434 g = gen17(); 433 g = gen17();
435 g.next(); 434 g.next();
436 435
437 CheckScopeChain([debug.ScopeType.Catch, 436 CheckScopeChain([debug.ScopeType.Catch,
438 debug.ScopeType.Local, 437 debug.ScopeType.Closure,
439 debug.ScopeType.Script, 438 debug.ScopeType.Script,
440 debug.ScopeType.Global], g); 439 debug.ScopeType.Global], g);
441 CheckScopeContent({e: 42}, 0, g); 440 CheckScopeContent({e: 42}, 0, g);
442 CheckScopeContent({xxxyyxxyx: 42284, 441 CheckScopeContent({xxxyyxxyx: 42284,
443 printProtocolMessages : printProtocolMessages, 442 printProtocolMessages : printProtocolMessages,
444 activeWrapper : activeWrapper, 443 activeWrapper : activeWrapper,
445 DebugWrapper : DebugWrapper 444 DebugWrapper : DebugWrapper
446 }, 2, g); 445 }, 2, g);
447 446
448 Debug.generatorScope(g, 0).setVariableValue("e", 1); 447 Debug.generatorScope(g, 0).setVariableValue("e", 1);
449 CheckScopeContent({e: 1}, 0, g); 448 CheckScopeContent({e: 1}, 0, g);
450 449
451 assertEquals(1, g.next().value); 450 assertEquals(1, g.next().value);
452 451
453 // Script scope. 452 // Script scope.
454 Debug.generatorScope(g, 2).setVariableValue("xxxyyxxyx", 42); 453 Debug.generatorScope(g, 2).setVariableValue("xxxyyxxyx", 42);
455 assertEquals(42, xxxyyxxyx); 454 assertEquals(42, xxxyyxxyx);
456 455
457 // Global scope. 456 // Global scope.
458 assertThrows(() => Debug.generatorScope(g, 3).setVariableValue("yyzyzzyz", 42)); 457 assertThrows(() => Debug.generatorScope(g, 3).setVariableValue("yyzyzzyz", 42));
459 assertEquals(4829, yyzyzzyz); 458 assertEquals(4829, yyzyzzyz);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698