Home | History | Annotate | Download | only in regress
      1 // Copyright 2015 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
      6 
      7 var Debug = debug.Debug;
      8 var expected = ["debugger;", "var x = y;", "debugger;", "var x = y;"];
      9 var log = [];
     10 
     11 function listener(event, exec_state, event_data, data) {
     12   if (event != Debug.DebugEvent.Break) return;
     13   try {
     14     log.push(exec_state.frame(0).sourceLineText().trimLeft());
     15     exec_state.prepareStep(Debug.StepAction.StepNext);
     16   } catch (e) {
     17     %AbortJS(e + "\n" + e.stack);
     18   }
     19 }
     20 
     21 Debug.setListener(listener);
     22 
     23 function f() {
     24   var a = 1;
     25   debugger;
     26   var x = y;
     27   print(x);
     28 }
     29 
     30 function call_f_with_deeper_stack() {
     31   (() => () => () => f())()()();
     32 }
     33 
     34 var p = Promise.resolve();
     35 p.then(f);
     36 p.then(call_f_with_deeper_stack);
     37 
     38 // Schedule microtask to check against expectation at the end.
     39 function testDone(iteration) {
     40   function checkResult() {
     41     try {
     42       assertTrue(iteration < 10);
     43       if (expected.length == log.length) {
     44         assertEquals(expected, log);
     45       } else {
     46         testDone(iteration + 1);
     47       }
     48     } catch (e) {
     49       %AbortJS(e + "\n" + e.stack);
     50     }
     51   }
     52 
     53   %EnqueueMicrotask(checkResult);
     54 }
     55 
     56 testDone(0);
     57