Fix break location calculation.
R=ulan@chromium.org BUG=chromium:419663 LOG=Y Review URL: https://codereview.chromium.org/658723005 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24697 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
e149f81eba
commit
83ddaa0df7
10
src/debug.cc
10
src/debug.cc
@ -1096,7 +1096,7 @@ bool Debug::SetBreakPoint(Handle<JSFunction> function,
|
||||
it.FindBreakLocationFromPosition(*source_position, STATEMENT_ALIGNED);
|
||||
it.SetBreakPoint(break_point_object);
|
||||
|
||||
*source_position = it.position();
|
||||
*source_position = it.statement_position();
|
||||
|
||||
// At least one active break point now.
|
||||
return debug_info->GetBreakPointCount() > 0;
|
||||
@ -1140,7 +1140,10 @@ bool Debug::SetBreakPointForScript(Handle<Script> script,
|
||||
it.FindBreakLocationFromPosition(position, alignment);
|
||||
it.SetBreakPoint(break_point_object);
|
||||
|
||||
*source_position = it.position() + shared->start_position();
|
||||
position = (alignment == STATEMENT_ALIGNED) ? it.statement_position()
|
||||
: it.position();
|
||||
|
||||
*source_position = position + shared->start_position();
|
||||
|
||||
// At least one active break point now.
|
||||
DCHECK(debug_info->GetBreakPointCount() > 0);
|
||||
@ -1566,9 +1569,6 @@ Handle<Object> Debug::GetSourceBreakLocations(
|
||||
case BREAK_POSITION_ALIGNED:
|
||||
position = break_point_info->source_position();
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
position = break_point_info->statement_position();
|
||||
}
|
||||
|
||||
locations->set(count++, position);
|
||||
|
37
test/mjsunit/regress/regress-419663.js
Normal file
37
test/mjsunit/regress/regress-419663.js
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright 2012 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
|
||||
|
||||
var o = {
|
||||
f: function(x) {
|
||||
var a = x + 1;
|
||||
o = 1;
|
||||
}
|
||||
}
|
||||
|
||||
function sentinel() {}
|
||||
|
||||
var Debug = debug.Debug;
|
||||
|
||||
Debug.setListener(function() {});
|
||||
|
||||
var script = Debug.findScript(sentinel);
|
||||
|
||||
// Used in Debug.setScriptBreakPointById.
|
||||
var p = Debug.findScriptSourcePosition(script, 9, 0);
|
||||
var q = Debug.setBreakPointByScriptIdAndPosition(script.id, p).actual_position;
|
||||
var r = Debug.setBreakPointByScriptIdAndPosition(script.id, q).actual_position;
|
||||
|
||||
assertEquals(q, r);
|
||||
|
||||
function assertLocation(p, l, c) {
|
||||
var location = script.locationFromPosition(p, false);
|
||||
assertEquals(l, location.line);
|
||||
assertEquals(c, location.column);
|
||||
}
|
||||
|
||||
assertLocation(p, 9, 0);
|
||||
assertLocation(q, 9, 4);
|
||||
assertLocation(r, 9, 4);
|
Loading…
Reference in New Issue
Block a user