Index: src/debug-debugger.js |
diff --git a/src/debug-debugger.js b/src/debug-debugger.js |
old mode 100644 |
new mode 100755 |
index d5e91cbdd25c4334d531504d066767e3432e6027..36203f2f7bf8ea53ff68349b44a681ef61bf8e21 |
--- a/src/debug-debugger.js |
+++ b/src/debug-debugger.js |
@@ -236,6 +236,7 @@ function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, |
this.active_ = true; |
this.condition_ = null; |
this.ignoreCount_ = 0; |
+ this.break_points_ = []; |
} |
@@ -289,6 +290,15 @@ ScriptBreakPoint.prototype.column = function() { |
}; |
+ScriptBreakPoint.prototype.actual_locations = function() { |
+ var locations = []; |
+ for (var i = 0; i < this.break_points_.length; i++) { |
+ locations.push(this.break_points_[i].actual_location); |
+ } |
+ return locations; |
+} |
+ |
+ |
ScriptBreakPoint.prototype.update_positions = function(line, column) { |
this.line_ = line; |
this.column_ = column; |
@@ -334,10 +344,8 @@ ScriptBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { |
this.ignoreCount_ = ignoreCount; |
// Set ignore count on all break points created from this script break point. |
- for (var i = 0; i < break_points.length; i++) { |
- if (break_points[i].script_break_point() === this) { |
- break_points[i].setIgnoreCount(ignoreCount); |
- } |
+ for (var i = 0; i < this.break_points_.length; i++) { |
+ this.break_points_[i].setIgnoreCount(ignoreCount); |
} |
}; |
@@ -379,20 +387,23 @@ ScriptBreakPoint.prototype.set = function (script) { |
} |
// Convert the line and column into an absolute position within the script. |
- var pos = Debug.findScriptSourcePosition(script, this.line(), column); |
+ var position = Debug.findScriptSourcePosition(script, this.line(), column); |
// If the position is not found in the script (the script might be shorter |
// than it used to be) just ignore it. |
- if (pos === null) return; |
+ if (position === null) return; |
// Create a break point object and set the break point. |
- break_point = MakeBreakPoint(pos, this.line(), this.column(), this); |
+ break_point = MakeBreakPoint(position, this.line(), this.column(), this); |
break_point.setIgnoreCount(this.ignoreCount()); |
- pos = %SetScriptBreakPoint(script, pos, break_point); |
- if (!IS_UNDEFINED(pos)) { |
- this.actual_location = script.locationFromPosition(pos); |
- } |
- |
+ var actual_position = %SetScriptBreakPoint(script, position, break_point); |
+ if (IS_UNDEFINED(actual_position)) { |
Søren Thygesen Gjesse
2010/06/28 06:50:30
Is this undefined check still needed after the cha
podivilov
2010/06/28 12:10:06
Yes, because Runtime_SetScriptBreakPoint returns u
|
+ actual_position = position; |
+ } |
+ var actual_location = script.locationFromPosition(actual_position, true); |
+ break_point.actual_location = { line: actual_location.line, |
+ column: actual_location.column }; |
+ this.break_points_.push(break_point); |
return break_point; |
}; |
@@ -409,6 +420,7 @@ ScriptBreakPoint.prototype.clear = function () { |
} |
} |
break_points = remaining_break_points; |
+ this.break_points_ = []; |
}; |
@@ -554,6 +566,19 @@ Debug.findBreakPoint = function(break_point_number, remove) { |
} |
}; |
+Debug.findBreakPointActualLocations = function(break_point_number) { |
+ for (var i = 0; i < script_break_points.length; i++) { |
+ if (script_break_points[i].number() == break_point_number) { |
+ return script_break_points[i].actual_locations(); |
+ } |
+ } |
+ for (var i = 0; i < break_points.length; i++) { |
+ if (break_points[i].number() == break_point_number) { |
+ return [break_points[i].actual_location]; |
+ } |
+ } |
+ return []; |
+} |
Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { |
if (!IS_FUNCTION(func)) throw new Error('Parameters have wrong types.'); |
@@ -585,7 +610,11 @@ Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { |
} else { |
// Set a break point directly on the function. |
var break_point = MakeBreakPoint(source_position, opt_line, opt_column); |
- %SetFunctionBreakPoint(func, source_position, break_point); |
+ var pos = %SetFunctionBreakPoint(func, source_position, break_point); |
Søren Thygesen Gjesse
2010/06/28 06:50:30
Maybe pos -> actual_position as above
podivilov
2010/06/28 12:10:06
Done.
|
+ pos += this.sourcePosition(func); |
+ var actual_location = script.locationFromPosition(pos, true); |
+ break_point.actual_location = { line: actual_location.line, |
+ column: actual_location.column }; |
break_point.setCondition(opt_condition); |
return break_point.number(); |
} |
@@ -1482,8 +1511,10 @@ DebugCommandProcessor.prototype.setBreakPointRequest_ = |
} |
response.body.line = break_point.line(); |
response.body.column = break_point.column(); |
+ response.body.actual_locations = break_point.actual_locations(); |
} else { |
response.body.type = 'function'; |
+ response.body.actual_locations = [break_point.actual_location]; |
} |
}; |
@@ -1598,7 +1629,8 @@ DebugCommandProcessor.prototype.listBreakpointsRequest_ = function(request, resp |
hit_count: break_point.hit_count(), |
active: break_point.active(), |
condition: break_point.condition(), |
- ignoreCount: break_point.ignoreCount() |
+ ignoreCount: break_point.ignoreCount(), |
+ actual_locations: break_point.actual_locations() |
} |
if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { |