c8c346b2c7de1e4470ff961c4be2447045a050d2
[platform/upstream/nodejs.git] / deps / v8 / test / mjsunit / debug-step-turbofan.js
1 // Copyright 2014 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: --turbo-filter=g --allow-natives-syntax
6
7 // Test that Debug::PrepareForBreakPoints can deal with turbofan code (g)
8 // on the stack.  Without deoptimization support, we will not be able to
9 // replace optimized code for g by unoptimized code with debug break slots.
10 // This would cause stepping to fail (V8 issue 3660).
11
12 function f(x) {
13   g(x);
14   var a = 0;              // Break 6
15   return a;               // Break 7
16 }                         // Break 8
17
18 function g(x) {
19   if (x) h();
20   var a = 0;              // Break 2
21   var b = 1;              // Break 3
22   return a + b;           // Break 4
23 }                         // Break 5
24
25 function h() {
26   debugger;               // Break 0
27 }                         // Break 1
28
29 Debug = debug.Debug;
30 var exception = null;
31 var break_count = 0;
32
33 function listener(event, exec_state, event_data, data) {
34   if (event != Debug.DebugEvent.Break) return;
35   try {
36     exec_state.prepareStep(Debug.StepAction.StepNext, 1);
37     print(exec_state.frame(0).sourceLineText());
38     var match = exec_state.frame(0).sourceLineText().match(/Break (\d)/);
39     assertNotNull(match);
40     assertEquals(break_count++, parseInt(match[1]));
41   } catch (e) {
42     print(e + e.stack);
43     exception = e;
44   }
45 }
46
47 f(0);
48 f(0);
49 %OptimizeFunctionOnNextCall(g);
50
51 Debug.setListener(listener);
52
53 f(1);
54
55 Debug.setListener(null);  // Break 9
56 assertNull(exception);
57 assertEquals(10, break_count);