OLD | NEW |
| (Empty) |
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: --expose-debug-as debug --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); | |
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); | |
OLD | NEW |