c1b5d17439
If we compile handlers to call accessors, Debug::HandleStepIn won't get called. Therefore we need to clear ICs each time. This has not been necessary before because we used to patch ICs for breaking, and restored them with cleared ICs. This is no longer the case. We do not use ICs for breaking anymore, so they are not implicitly cleared any longer. R=mvstanton@chromium.org BUG=v8:4269 LOG=N Review URL: https://codereview.chromium.org/1212253009 Cr-Commit-Position: refs/heads/master@{#29518}
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
// 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 get() {
|
|
return 3; // Break
|
|
} // Break
|
|
|
|
function set(x) {
|
|
this.x = x; // Break
|
|
} // Break
|
|
|
|
var o = {};
|
|
Object.defineProperty(o, "get", { get : get });
|
|
Object.defineProperty(o, "set", { set : set });
|
|
|
|
function f() {
|
|
for (var i = 0; i < 10; i++) { // Break
|
|
o.get; // Break
|
|
o.set = 1; // Break
|
|
}
|
|
} // Break
|
|
|
|
var break_count = 0;
|
|
var exception = null;
|
|
|
|
function listener(event, exec_state, event_data, data) {
|
|
if (event != Debug.DebugEvent.Break) return;
|
|
try {
|
|
var source_line = exec_state.frame(0).sourceLineText();
|
|
assertTrue(source_line.indexOf("// Break") > 0);
|
|
exec_state.prepareStep(Debug.StepAction.StepIn, 1);
|
|
break_count++;
|
|
} catch (e) {
|
|
exception = e;
|
|
}
|
|
}
|
|
|
|
var Debug = debug.Debug;
|
|
Debug.setListener(listener);
|
|
|
|
debugger; // Break
|
|
f(); // Break
|
|
|
|
Debug.setListener(null); // Break
|
|
assertEquals(86, break_count);
|
|
assertNull(exception);
|