| Index: src/messages.js
|
| diff --git a/src/messages.js b/src/messages.js
|
| index 69be1c9ab53e737bcdb93a9b6f9dbdf2c2cf0e2e..fe4098fb089871d06f01de5141cf2829937a0f40 100644
|
| --- a/src/messages.js
|
| +++ b/src/messages.js
|
| @@ -410,26 +410,34 @@ function MakeReferenceErrorEmbedded(type, arg) {
|
| else the line number.
|
| */
|
| function ScriptLineFromPosition(position) {
|
| + var lower = 0;
|
| + var upper = this.lineCount() - 1;
|
| var line_ends = this.line_ends;
|
| - var upper = line_ends.length - 1;
|
| - if (upper < 0) return -1;
|
|
|
| // We'll never find invalid positions so bail right away.
|
| - if (position > line_ends[upper]) return -1;
|
| - if (position <= line_ends[0]) return 0;
|
| -
|
| - var lower = 1;
|
| - // Binary search.
|
| - while (true) {
|
| - var mid = (upper + lower) >> 1;
|
| - if (position <= line_ends[mid - 1]) {
|
| - upper = mid - 1;
|
| - } else if (position > line_ends[mid]){
|
| - lower = mid + 1;
|
| + if (position > line_ends[upper]) {
|
| + return -1;
|
| + }
|
| +
|
| + // This means we don't have to safe-guard indexing line_ends[i - 1].
|
| + if (position <= line_ends[0]) {
|
| + return 0;
|
| + }
|
| +
|
| + // Binary search to find line # from position range.
|
| + while (upper >= 1) {
|
| + var i = (lower + upper) >> 1;
|
| +
|
| + if (position > line_ends[i]) {
|
| + lower = i + 1;
|
| + } else if (position <= line_ends[i - 1]) {
|
| + upper = i - 1;
|
| } else {
|
| - return mid;
|
| + return i;
|
| }
|
| }
|
| +
|
| + return -1;
|
| }
|
|
|
| /**
|
|
|