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 3 // found in the LICENSE file. 4 5 // Flags: --expose-debug-as debug --allow-natives-syntax --harmony-async-await 6 7 var Debug = debug.Debug; 8 var step_count = 0; 9 10 function listener(event, execState, eventData, data) { 11 if (event != Debug.DebugEvent.Break) return; 12 try { 13 var line = execState.frame(0).sourceLineText(); 14 print(line); 15 var [match, expected_count, step] = /\/\/ B(\d) (\w+)$/.exec(line); 16 assertEquals(step_count++, parseInt(expected_count)); 17 if (step != "Continue") execState.prepareStep(Debug.StepAction[step]); 18 } catch (e) { 19 print(e, e.stack); 20 quit(1); 21 } 22 } 23 24 Debug.setListener(listener); 25 26 var late_resolve; 27 28 function g() { 29 return new Promise( // B3 StepOut 30 function(res, rej) { 31 late_resolve = res; 32 } 33 ); 34 } 35 36 async function f() { 37 var a = 1; 38 debugger; // B0 StepNext 39 a += // B1 StepNext 40 await // B4 StepNext 41 g(); // B2 StepIn 42 return a; // B6 StepNext 43 } // B7 Continue 44 45 f(); 46 47 // Continuing at an intermediate break point means that we will 48 // carry on with the current async step. 49 debugger; // B5 Continue 50 51 late_resolve(3); 52 53 %RunMicrotasks(); 54 55 assertEquals(8, step_count); 56