Frame-onStep-generators-defaults.js (999B)
1 // onStep works during the evaluation of default parameter values in generators. 2 // 3 // (They're evaluated at a weird time in the generator life cycle, before the 4 // generator object is created.) 5 6 load(libdir + "asserts.js"); 7 8 let g = newGlobal({newCompartment: true}); 9 g.eval(`\ 10 function f1() {} // line 1 11 function f2() {} // 2 12 function f3() {} // 3 13 // 4 14 function* gen( // 5 15 name, // 6 16 schema = f1(), // 7 17 timeToLive = f2(), // 8 18 lucidity = f3() // 9 19 ) { // 10 20 } // 11 21 `); 22 23 let dbg = Debugger(g); 24 let log = []; 25 dbg.onEnterFrame = frame => { 26 frame.onStep = () => { 27 let line = frame.script.getOffsetLocation(frame.offset).lineNumber; 28 if (log.length == 0 || line != log[log.length - 1]) { 29 log.push(line); 30 } 31 }; 32 }; 33 34 g.gen(0); 35 assertDeepEq(log, [5, 7, 1, 8, 2, 9, 3, 10]);