|
|
|
// 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);
|