Index: src/debug-debugger.js |
diff --git a/src/debug-debugger.js b/src/debug-debugger.js |
index 7787312ddc68ead51e24738a512d6affda2f4501..88efbe212af13330561b60f0e3dff36fdf4e3e05 100644 |
--- a/src/debug-debugger.js |
+++ b/src/debug-debugger.js |
@@ -71,6 +71,13 @@ Debug.ScriptBreakPointType = { ScriptId: 0, |
ScriptName: 1, |
ScriptRegExp: 2 }; |
+// The different types of breakpoint position alignments. |
+// Must match BreakPositionAlignment in debug.h. |
+Debug.BreakPositionAlignment = { |
+ Statement: 0, |
+ BreakPosition: 1 |
+}; |
+ |
function ScriptTypeFlag(type) { |
return (1 << type); |
} |
@@ -251,7 +258,7 @@ function IsBreakPointTriggered(break_id, break_point) { |
// script name or script id and the break point is represented as line and |
// column. |
function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
- opt_groupId) { |
+ opt_groupId, opt_position_alignment) { |
this.type_ = type; |
if (type == Debug.ScriptBreakPointType.ScriptId) { |
this.script_id_ = script_id_or_name; |
@@ -265,6 +272,8 @@ function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
this.line_ = opt_line || 0; |
this.column_ = opt_column; |
this.groupId_ = opt_groupId; |
+ this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) |
+ ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; |
this.hit_count_ = 0; |
this.active_ = true; |
this.condition_ = null; |
@@ -276,7 +285,8 @@ function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
//Creates a clone of script breakpoint that is linked to another script. |
ScriptBreakPoint.prototype.cloneForOtherScript = function (other_script) { |
var copy = new ScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, |
- other_script.id, this.line_, this.column_, this.groupId_); |
+ other_script.id, this.line_, this.column_, this.groupId_, |
+ this.position_alignment_); |
copy.number_ = next_break_point_number++; |
script_break_points.push(copy); |
@@ -443,7 +453,9 @@ ScriptBreakPoint.prototype.set = function (script) { |
// Create a break point object and set the break point. |
break_point = MakeBreakPoint(position, this); |
break_point.setIgnoreCount(this.ignoreCount()); |
- var actual_position = %SetScriptBreakPoint(script, position, break_point); |
+ var actual_position = %SetScriptBreakPoint(script, position, |
+ this.position_alignment_, |
+ break_point); |
if (IS_UNDEFINED(actual_position)) { |
actual_position = position; |
} |
@@ -509,9 +521,11 @@ Debug.breakExecution = function(f) { |
%Break(); |
}; |
-Debug.breakLocations = function(f) { |
+Debug.breakLocations = function(f, opt_position_aligment) { |
if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); |
- return %GetBreakLocations(f); |
+ var position_aligment = IS_UNDEFINED(opt_position_aligment) |
+ ? Debug.BreakPositionAlignment.Statement : opt_position_aligment; |
+ return %GetBreakLocations(f, position_aligment); |
}; |
// Returns a Script object. If the parameter is a function the return value |
@@ -674,7 +688,8 @@ Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { |
Debug.setBreakPointByScriptIdAndPosition = function(script_id, position, |
- condition, enabled) |
+ condition, enabled, |
+ opt_position_alignment) |
{ |
break_point = MakeBreakPoint(position); |
break_point.setCondition(condition); |
@@ -682,10 +697,12 @@ Debug.setBreakPointByScriptIdAndPosition = function(script_id, position, |
break_point.disable(); |
} |
var scripts = this.scripts(); |
+ var position_alignment = IS_UNDEFINED(opt_position_alignment) |
+ ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; |
for (var i = 0; i < scripts.length; i++) { |
if (script_id == scripts[i].id) { |
break_point.actual_position = %SetScriptBreakPoint(scripts[i], position, |
- break_point); |
+ position_alignment, break_point); |
break; |
} |
} |
@@ -780,11 +797,11 @@ Debug.findScriptBreakPoint = function(break_point_number, remove) { |
// specified source line and column within that line. |
Debug.setScriptBreakPoint = function(type, script_id_or_name, |
opt_line, opt_column, opt_condition, |
- opt_groupId) { |
+ opt_groupId, opt_position_alignment) { |
// Create script break point object. |
var script_break_point = |
new ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
- opt_groupId); |
+ opt_groupId, opt_position_alignment); |
// Assign number to the new script break point and add it. |
script_break_point.number_ = next_break_point_number++; |
@@ -806,10 +823,12 @@ Debug.setScriptBreakPoint = function(type, script_id_or_name, |
Debug.setScriptBreakPointById = function(script_id, |
opt_line, opt_column, |
- opt_condition, opt_groupId) { |
+ opt_condition, opt_groupId, |
+ opt_position_alignment) { |
return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, |
script_id, opt_line, opt_column, |
- opt_condition, opt_groupId); |
+ opt_condition, opt_groupId, |
+ opt_position_alignment); |
}; |
@@ -893,11 +912,11 @@ Debug.isBreakOnUncaughtException = function() { |
return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); |
}; |
-Debug.showBreakPoints = function(f, full) { |
+Debug.showBreakPoints = function(f, full, opt_position_alignment) { |
if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); |
var source = full ? this.scriptSource(f) : this.source(f); |
var offset = full ? this.sourcePosition(f) : 0; |
- var locations = this.breakLocations(f); |
+ var locations = this.breakLocations(f, opt_position_alignment); |
if (!locations) return source; |
locations.sort(function(x, y) { return x - y; }); |
var result = ""; |