Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Unified Diff: src/messages.js

Issue 21041: Refactor code for determining line position in a source file.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/messages.js
===================================================================
--- src/messages.js (revision 1220)
+++ src/messages.js (working copy)
@@ -102,7 +102,7 @@
invalid_array_length: "Invalid array length",
invalid_array_apply_length: "Function.prototype.apply supports only up to 1024 arguments",
stack_overflow: "Maximum call stack size exceeded",
- apply_overflow: "Function.prototype.apply cannot support %0 arguments",
+ apply_overflow: "Function.prototype.apply cannot support %0 arguments",
// SyntaxError
unable_to_parse: "Parse error",
duplicate_regexp_flag: "Duplicate RegExp flag %0",
@@ -228,47 +228,19 @@
/**
- * Initialize the cached source information in a script. Currently all line
- * end positions are cached.
- */
-Script.prototype.initSourceInfo_ = function () {
- // Just return if initialized.
- if (this.lineEnds_) return;
-
- // Collect all line endings.
- this.lineEnds_ = [];
- for (var i = 0; i < this.source.length; i++) {
- var current = this.source.charAt(i);
- if (current == '\n') {
- this.lineEnds_.push(i);
- }
- }
-
- // If the script does not end with a line ending add the final end position
- // as just past the last line ending.
- if (this.lineEnds_[this.lineEnds_.length - 1] != this.source.length - 1) {
- this.lineEnds_.push(this.source.length);
- }
-};
-
-
-/**
* Get information on a specific source position.
* @param {number} position The source position
* @return {SourceLocation}
* If line is negative or not in the source null is returned.
*/
Script.prototype.locationFromPosition = function (position) {
- // Make sure source info has been initialized.
- this.initSourceInfo_();
-
var lineCount = this.lineCount();
var line = -1;
- if (position <= this.lineEnds_[0]) {
+ if (position <= this.line_ends[0]) {
line = 0;
} else {
for (var i = 1; i < lineCount; i++) {
- if (this.lineEnds_[i - 1] < position && position <= this.lineEnds_[i]) {
+ if (this.line_ends[i - 1] < position && position <= this.line_ends[i]) {
line = i;
break;
}
@@ -278,8 +250,8 @@
if (line == -1) return null;
// Determine start, end and column.
- var start = line == 0 ? 0 : this.lineEnds_[line - 1] + 1;
- var end = this.lineEnds_[line];
+ var start = line == 0 ? 0 : this.line_ends[line - 1] + 1;
+ var end = this.line_ends[line];
if (end > 0 && this.source.charAt(end - 1) == '\r') end--;
var column = position - start;
@@ -308,9 +280,6 @@
* If line is negative or not in the source null is returned.
*/
Script.prototype.locationFromLine = function (opt_line, opt_column, opt_offset_position) {
- // Make soure source info has been initialized.
- this.initSourceInfo_();
-
// Default is the first line in the script. Lines in the script is relative
// to the offset within the resource.
var line = 0;
@@ -334,13 +303,13 @@
var lineCount = this.lineCount();
var offset_line;
for (var i = 0; i < lineCount; i++) {
- if (offset_position <= this.lineEnds_[i]) {
+ if (offset_position <= this.line_ends[i]) {
offset_line = i;
break;
}
}
if (offset_line + line >= lineCount) return null;
- return this.locationFromPosition(this.lineEnds_[offset_line + line - 1] + 1 + column); // line > 0 here.
+ return this.locationFromPosition(this.line_ends[offset_line + line - 1] + 1 + column); // line > 0 here.
}
}
@@ -356,9 +325,6 @@
* invalid
*/
Script.prototype.sourceSlice = function (opt_from_line, opt_to_line) {
- // Make soure source info has been initialized.
- this.initSourceInfo_();
-
var from_line = IS_UNDEFINED(opt_from_line) ? this.line_offset : opt_from_line;
var to_line = IS_UNDEFINED(opt_to_line) ? this.line_offset + this.lineCount() : opt_to_line
@@ -368,15 +334,15 @@
if (from_line < 0) from_line = 0;
if (to_line > this.lineCount()) to_line = this.lineCount();
- // Check parameters.
+ // Check parameters.
if (from_line >= this.lineCount() ||
to_line < 0 ||
from_line > to_line) {
return null;
}
- var from_position = from_line == 0 ? 0 : this.lineEnds_[from_line - 1] + 1;
- var to_position = to_line == 0 ? 0 : this.lineEnds_[to_line - 1] + 1;
+ var from_position = from_line == 0 ? 0 : this.line_ends[from_line - 1] + 1;
+ var to_position = to_line == 0 ? 0 : this.line_ends[to_line - 1] + 1;
// Return a source slice with line numbers re-adjusted to the resource.
return new SourceSlice(this, from_line + this.line_offset, to_line + this.line_offset,
@@ -391,15 +357,15 @@
if (!IS_UNDEFINED(opt_line)) {
line = opt_line - this.line_offset;
}
-
- // Check parameter.
+
+ // Check parameter.
if (line < 0 || this.lineCount() <= line) {
return null;
}
- // Return the source line.
- var start = line == 0 ? 0 : this.lineEnds_[line - 1] + 1;
- var end = this.lineEnds_[line];
+ // Return the source line.
+ var start = line == 0 ? 0 : this.line_ends[line - 1] + 1;
+ var end = this.line_ends[line];
return this.source.substring(start, end);
}
@@ -410,11 +376,8 @@
* Number of source lines.
*/
Script.prototype.lineCount = function() {
- // Make soure source info has been initialized.
- this.initSourceInfo_();
-
- // Return number of source lines.
- return this.lineEnds_.length;
+ // Return number of source lines.
+ return this.line_ends.length;
};
@@ -430,7 +393,7 @@
* Source text for the source context is the character interval [start, end[. In
* most cases end will point to a newline character. It might point just past
* the final position of the source if the last source line does not end with a
- * newline character.
+ * newline character.
* @param {Script} script The Script object for which this is a location
* @param {number} position Source position for the location
* @param {number} line The line number for the location
« no previous file with comments | « src/compiler.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698