| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --expose-debug-as debug |
| |
| function f0() { |
| var v00 = 0; // Break 1 |
| var v01 = 1; |
| // Normal function call in a catch scope. |
| try { |
| throw 1; |
| } catch (e) { |
| try { |
| f1(); |
| } catch (e) { |
| var v02 = 2; // Break 13 |
| } |
| } |
| var v03 = 3; |
| var v04 = 4; |
| eval('var v05 = 5; // Break 14'); |
| var v06 = 6; // Break 15 |
| } |
| |
| function f1() { |
| var v10 = 0; // Break 2 |
| var v11 = 1; |
| // Getter call. |
| var v12 = o.get; |
| var v13 = 3 // Break 4 |
| // Setter call. |
| o.set = 2; |
| var v14 = 4; // Break 6 |
| // Function.prototype.call. |
| f2.call(); |
| var v15 = 5; // Break 12 |
| var v16 = 6; |
| // Exit function by throw. |
| throw 1; |
| var v17 = 7; |
| } |
| |
| function get() { |
| var g0 = 0; // Break 3 |
| var g1 = 1; |
| return 3; |
| } |
| |
| function set() { |
| var s0 = 0; // Break 5 |
| return 3; |
| } |
| |
| function f2() { |
| var v20 = 0; // Break 7 |
| // Construct call. |
| var v21 = new c0(); |
| var v22 = 2; // Break 9 |
| // Bound function. |
| b0(); |
| return 2; // Break 11 |
| } |
| |
| function c0() { |
| this.v0 = 0; // Break 8 |
| this.v1 = 1; |
| } |
| |
| function f3() { |
| var v30 = 0; // Break 10 |
| var v31 = 1; |
| return 3; |
| } |
| |
| var b0 = f3.bind(o); |
| |
| var o = {}; |
| Object.defineProperty(o, "get", { get : get }); |
| Object.defineProperty(o, "set", { set : set }); |
| |
| Debug = debug.Debug; |
| var break_count = 0 |
| var exception = null; |
| |
| function listener(event, exec_state, event_data, data) { |
| if (event != Debug.DebugEvent.Break) return; |
| try { |
| var line = exec_state.frame(0).sourceLineText(); |
| print(line); |
| var match = line.match(/\/\/ Break (\d+)$/); |
| assertEquals(2, match.length); |
| assertEquals(break_count, parseInt(match[1])); |
| break_count ++; |
| exec_state.prepareStep(Debug.StepAction.StepFrame); |
| } catch (e) { |
| print(e + e.stack); |
| exception = e; |
| } |
| } |
| |
| |
| break_count = 0; |
| Debug.setListener(listener); |
| debugger; // Break 0 |
| f0(); |
| Debug.setListener(null); // Break 16 |
| assertTrue(break_count > 14); |
| |
| assertNull(exception); |