| Index: test/mjsunit/debug-stepframe.js
|
| diff --git a/test/mjsunit/debug-stepframe.js b/test/mjsunit/debug-stepframe.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8f4ee4ca11ccaf8befd6c95ac2f8a0d0372266ea
|
| --- /dev/null
|
| +++ b/test/mjsunit/debug-stepframe.js
|
| @@ -0,0 +1,111 @@
|
| +// 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;
|
| +}
|
| +
|
| +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;
|
| +var step_size;
|
| +
|
| +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 += step_size;
|
| + exec_state.prepareStep(Debug.StepAction.StepFrame, step_size);
|
| + } catch (e) {
|
| + print(e + e.stack);
|
| + exception = e;
|
| + }
|
| +}
|
| +
|
| +for (step_size = 1; step_size < 6; step_size++) {
|
| + print("step size = " + step_size);
|
| + break_count = 0;
|
| + Debug.setListener(listener);
|
| + debugger; // Break 0
|
| + f0();
|
| + Debug.setListener(null); // Break 14
|
| + assertTrue(break_count > 14);
|
| +}
|
| +
|
| +assertNull(exception);
|
|
|