onEnterFrame-generator-resumption-01.js (957B)
1 // A debugger can {throw:} from onEnterFrame at any resume point in a generator. 2 // It closes the generator. 3 4 load(libdir + "asserts.js"); 5 6 let g = newGlobal({newCompartment: true}); 7 g.eval(` 8 function* f() { yield 1; } 9 var exn = new TypeError("object too hairy"); 10 `); 11 12 let dbg = new Debugger; 13 let gw = dbg.addDebuggee(g); 14 15 // Repeat the test for each onEnterFrame event. 16 // It fires up to three times: 17 // - when the generator g.f is called; 18 // - when we enter it to run to `yield 1`; 19 // - when we resume after the yield to run to the end. 20 for (let i = 0; i < 3; i++) { 21 let hits = 0; 22 dbg.onEnterFrame = frame => { 23 return hits++ < i ? undefined : {throw: gw.makeDebuggeeValue(g.exn)}; 24 }; 25 let genObj; 26 assertThrowsValue( 27 () => { 28 genObj = g.f(); 29 for (let x of genObj) {} 30 }, 31 g.exn 32 ); 33 assertEq(hits, i + 1); 34 if (hits > 1) 35 assertEq(genObj.next().done, true); 36 }