[debugger] correctly find source position of implicit return statement.
The parser reads one character beyond EOF to have an additional source position that the rewriter can use to insert the implicit return statement at the end of a script. If we break at that return statement, we need to be able to translate the source position to line and column number. R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/1521953003 Cr-Commit-Position: refs/heads/master@{#32825}
This commit is contained in:
parent
567794a7d6
commit
0b1076a68e
@ -11352,11 +11352,13 @@ static void CalculateLineEndsImpl(Isolate* isolate,
|
||||
if (cache->IsLineTerminatorSequence(current, next)) line_ends->Add(i);
|
||||
}
|
||||
|
||||
if (src_len > 0 && cache->IsLineTerminatorSequence(src[src_len - 1], 0)) {
|
||||
line_ends->Add(src_len - 1);
|
||||
} else if (include_ending_line) {
|
||||
// Even if the last line misses a line end, it is counted.
|
||||
if (include_ending_line) {
|
||||
// Include one character beyond the end of script. The rewriter uses that
|
||||
// position for the implicit return statement.
|
||||
line_ends->Add(src_len);
|
||||
} else if (src_len > 0 &&
|
||||
cache->IsLineTerminatorSequence(src[src_len - 1], 0)) {
|
||||
line_ends->Add(src_len - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,9 +63,9 @@ var comment_lines = 28;
|
||||
|
||||
// This is the last position in the entire file (note: this equals
|
||||
// file size of <debug-sourceinfo.js> - 1, since starting at 0).
|
||||
var last_position = 11337;
|
||||
var last_position = 11529;
|
||||
// This is the last line of entire file (note: starting at 0).
|
||||
var last_line = 265;
|
||||
var last_line = 269;
|
||||
// This is the last column of last line (note: starting at 0 and +1, due
|
||||
// to trailing <LF>).
|
||||
var last_column = 1;
|
||||
@ -244,18 +244,22 @@ assertEquals(70 + start_c, Debug.findFunctionSourceLocation(c, 6, 0).position);
|
||||
assertEquals(0 + start_d, Debug.findFunctionSourceLocation(d, 0, 0).position);
|
||||
assertEquals(6 + start_d, Debug.findFunctionSourceLocation(d, 1, 0).position);
|
||||
for (i = 1; i <= num_lines_d; i++) {
|
||||
assertEquals(6 + (i * line_length_d) + start_d, Debug.findFunctionSourceLocation(d, (i + 1), 0).position);
|
||||
assertEquals(6 + (i * line_length_d) + start_d,
|
||||
Debug.findFunctionSourceLocation(d, (i + 1), 0).position);
|
||||
}
|
||||
assertEquals(158 + start_d, Debug.findFunctionSourceLocation(d, 17, 0).position);
|
||||
|
||||
// Make sure invalid inputs work properly.
|
||||
assertEquals(0, script.locationFromPosition(-1).line);
|
||||
assertEquals(null, script.locationFromPosition(last_position + 1));
|
||||
assertEquals(null, script.locationFromPosition(last_position + 2));
|
||||
|
||||
// Test last position.
|
||||
assertEquals(last_position, script.locationFromPosition(last_position).position);
|
||||
assertEquals(last_line, script.locationFromPosition(last_position).line);
|
||||
assertEquals(last_column, script.locationFromPosition(last_position).column);
|
||||
assertEquals(last_line, script.locationFromPosition(last_position + 1).line);
|
||||
assertEquals(last_column + 1,
|
||||
script.locationFromPosition(last_position + 1).column);
|
||||
|
||||
// Test that script.sourceLine(line) works.
|
||||
var location;
|
||||
|
Loading…
Reference in New Issue
Block a user