Index: src/debug/debug.js |
diff --git a/src/debug/debug.js b/src/debug/debug.js |
index 38934b07af52980d520f9c559b73554257c5c291..cbd4dd21c75bf0e59ba36f12b06a756e3c1e767e 100644 |
--- a/src/debug/debug.js |
+++ b/src/debug/debug.js |
@@ -361,7 +361,7 @@ ScriptBreakPoint.prototype.matchesScript = function(script) { |
} else { |
// We might want to account columns here as well. |
if (!(script.line_offset <= this.line_ && |
- this.line_ < script.line_offset + script.lineCount())) { |
+ this.line_ < script.line_offset + %ScriptLineCount(script))) { |
return false; |
} |
if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { |
@@ -383,11 +383,11 @@ ScriptBreakPoint.prototype.set = function (script) { |
// first piece of breakable code on the line try to find the column on the |
// line which contains some source. |
if (IS_UNDEFINED(column)) { |
- var source_line = script.sourceLine(this.line()); |
+ var source_line = %ScriptSourceLine(script, line || script.line_offset); |
// Allocate array for caching the columns where the actual source starts. |
if (!script.sourceColumnStart_) { |
- script.sourceColumnStart_ = new GlobalArray(script.lineCount()); |
+ script.sourceColumnStart_ = new GlobalArray(%ScriptLineCount(script)); |
} |
// Fill cache if needed and get column where the actual source starts. |
@@ -536,14 +536,14 @@ Debug.sourcePosition = function(f) { |
Debug.findFunctionSourceLocation = function(func, opt_line, opt_column) { |
var script = %FunctionGetScript(func); |
var script_offset = %FunctionGetScriptSourcePosition(func); |
- return script.locationFromLine(opt_line, opt_column, script_offset); |
+ return %ScriptLocationFromLine(script, opt_line, opt_column, script_offset); |
}; |
// Returns the character position in a script based on a line number and an |
// optional position within that line. |
Debug.findScriptSourcePosition = function(script, opt_line, opt_column) { |
- var location = script.locationFromLine(opt_line, opt_column); |
+ var location = %ScriptLocationFromLine(script, opt_line, opt_column, 0); |
return location ? location.position : null; |
}; |
@@ -2085,18 +2085,34 @@ DebugCommandProcessor.prototype.sourceRequest_ = function(request, response) { |
return response.failed('No source'); |
} |
- // Get the source slice and fill it into the response. |
- var slice = script.sourceSlice(from_line, to_line); |
- if (!slice) { |
+ var raw_script = script.value(); |
+ |
+ // Sanitize arguments and remove line offset. |
+ var line_offset = raw_script.line_offset; |
+ var line_count = %ScriptLineCount(raw_script); |
+ from_line = IS_UNDEFINED(from_line) ? 0 : from_line - line_offset; |
+ to_line = IS_UNDEFINED(to_line) ? line_count : to_line - line_offset; |
+ |
+ if (from_line < 0) from_line = 0; |
+ if (to_line > line_count) to_line = line_count; |
+ |
+ if (from_line >= line_count || to_line < 0 || from_line > to_line) { |
return response.failed('Invalid line interval'); |
} |
+ |
+ // Fill in the response. |
+ |
response.body = {}; |
- response.body.source = slice.sourceText(); |
- response.body.fromLine = slice.from_line; |
- response.body.toLine = slice.to_line; |
- response.body.fromPosition = slice.from_position; |
- response.body.toPosition = slice.to_position; |
- response.body.totalLines = script.lineCount(); |
+ response.body.fromLine = from_line + line_offset; |
+ response.body.toLine = to_line + line_offset; |
+ response.body.fromPosition = %ScriptLineStartPosition(raw_script, from_line); |
+ response.body.toPosition = |
+ (to_line == 0) ? 0 : %ScriptLineEndPosition(raw_script, to_line - 1); |
+ response.body.totalLines = %ScriptLineCount(raw_script); |
+ |
+ response.body.source = %_SubString(raw_script.source, |
+ response.body.fromPosition, |
+ response.body.toPosition); |
}; |