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

Side by Side Diff: src/messages.js

Issue 449010: Merge revisions r3372 - r3374 to trunk... (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: Created 11 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/handles.cc ('k') | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 231
232 /** 232 /**
233 * Find a line number given a specific source position. 233 * Find a line number given a specific source position.
234 * @param {number} position The source position. 234 * @param {number} position The source position.
235 * @return {number} 0 if input too small, -1 if input too large, 235 * @return {number} 0 if input too small, -1 if input too large,
236 else the line number. 236 else the line number.
237 */ 237 */
238 Script.prototype.lineFromPosition = function(position) { 238 Script.prototype.lineFromPosition = function(position) {
239 var lower = 0; 239 var lower = 0;
240 var upper = this.lineCount() - 1; 240 var upper = this.lineCount() - 1;
241 var line_ends = this.line_ends;
241 242
242 // We'll never find invalid positions so bail right away. 243 // We'll never find invalid positions so bail right away.
243 if (position > this.line_ends[upper]) { 244 if (position > line_ends[upper]) {
244 return -1; 245 return -1;
245 } 246 }
246 247
247 // This means we don't have to safe-guard indexing line_ends[i - 1]. 248 // This means we don't have to safe-guard indexing line_ends[i - 1].
248 if (position <= this.line_ends[0]) { 249 if (position <= line_ends[0]) {
249 return 0; 250 return 0;
250 } 251 }
251 252
252 // Binary search to find line # from position range. 253 // Binary search to find line # from position range.
253 while (upper >= 1) { 254 while (upper >= 1) {
254 var i = (lower + upper) >> 1; 255 var i = (lower + upper) >> 1;
255 256
256 if (position > this.line_ends[i]) { 257 if (position > line_ends[i]) {
257 lower = i + 1; 258 lower = i + 1;
258 } else if (position <= this.line_ends[i - 1]) { 259 } else if (position <= line_ends[i - 1]) {
259 upper = i - 1; 260 upper = i - 1;
260 } else { 261 } else {
261 return i; 262 return i;
262 } 263 }
263 } 264 }
264 return -1; 265 return -1;
265 } 266 }
266 267
267 /** 268 /**
268 * Get information on a specific source position. 269 * Get information on a specific source position.
269 * @param {number} position The source position 270 * @param {number} position The source position
270 * @param {boolean} include_resource_offset Set to true to have the resource 271 * @param {boolean} include_resource_offset Set to true to have the resource
271 * offset added to the location 272 * offset added to the location
272 * @return {SourceLocation} 273 * @return {SourceLocation}
273 * If line is negative or not in the source null is returned. 274 * If line is negative or not in the source null is returned.
274 */ 275 */
275 Script.prototype.locationFromPosition = function (position, 276 Script.prototype.locationFromPosition = function (position,
276 include_resource_offset) { 277 include_resource_offset) {
277 var line = this.lineFromPosition(position); 278 var line = this.lineFromPosition(position);
278 if (line == -1) return null; 279 if (line == -1) return null;
279 280
280 // Determine start, end and column. 281 // Determine start, end and column.
281 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1; 282 var line_ends = this.line_ends;
282 var end = this.line_ends[line]; 283 var start = line == 0 ? 0 : line_ends[line - 1] + 1;
284 var end = line_ends[line];
283 if (end > 0 && StringCharAt.call(this.source, end - 1) == '\r') end--; 285 if (end > 0 && StringCharAt.call(this.source, end - 1) == '\r') end--;
284 var column = position - start; 286 var column = position - start;
285 287
286 // Adjust according to the offset within the resource. 288 // Adjust according to the offset within the resource.
287 if (include_resource_offset) { 289 if (include_resource_offset) {
288 line += this.line_offset; 290 line += this.line_offset;
289 if (line == this.line_offset) { 291 if (line == this.line_offset) {
290 column += this.column_offset; 292 column += this.column_offset;
291 } 293 }
292 } 294 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 if (from_line < 0) from_line = 0; 363 if (from_line < 0) from_line = 0;
362 if (to_line > this.lineCount()) to_line = this.lineCount(); 364 if (to_line > this.lineCount()) to_line = this.lineCount();
363 365
364 // Check parameters. 366 // Check parameters.
365 if (from_line >= this.lineCount() || 367 if (from_line >= this.lineCount() ||
366 to_line < 0 || 368 to_line < 0 ||
367 from_line > to_line) { 369 from_line > to_line) {
368 return null; 370 return null;
369 } 371 }
370 372
371 var from_position = from_line == 0 ? 0 : this.line_ends[from_line - 1] + 1; 373 var line_ends = this.line_ends;
372 var to_position = to_line == 0 ? 0 : this.line_ends[to_line - 1] + 1; 374 var from_position = from_line == 0 ? 0 : line_ends[from_line - 1] + 1;
375 var to_position = to_line == 0 ? 0 : line_ends[to_line - 1] + 1;
373 376
374 // Return a source slice with line numbers re-adjusted to the resource. 377 // Return a source slice with line numbers re-adjusted to the resource.
375 return new SourceSlice(this, from_line + this.line_offset, to_line + this.line _offset, 378 return new SourceSlice(this, from_line + this.line_offset, to_line + this.line _offset,
376 from_position, to_position); 379 from_position, to_position);
377 } 380 }
378 381
379 382
380 Script.prototype.sourceLine = function (opt_line) { 383 Script.prototype.sourceLine = function (opt_line) {
381 // Default is the first line in the script. Lines in the script are relative 384 // Default is the first line in the script. Lines in the script are relative
382 // to the offset within the resource. 385 // to the offset within the resource.
383 var line = 0; 386 var line = 0;
384 if (!IS_UNDEFINED(opt_line)) { 387 if (!IS_UNDEFINED(opt_line)) {
385 line = opt_line - this.line_offset; 388 line = opt_line - this.line_offset;
386 } 389 }
387 390
388 // Check parameter. 391 // Check parameter.
389 if (line < 0 || this.lineCount() <= line) { 392 if (line < 0 || this.lineCount() <= line) {
390 return null; 393 return null;
391 } 394 }
392 395
393 // Return the source line. 396 // Return the source line.
394 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1; 397 var line_ends = this.line_ends;
395 var end = this.line_ends[line]; 398 var start = line == 0 ? 0 : line_ends[line - 1] + 1;
399 var end = line_ends[line];
396 return StringSubstring.call(this.source, start, end); 400 return StringSubstring.call(this.source, start, end);
397 } 401 }
398 402
399 403
400 /** 404 /**
401 * Returns the number of source lines. 405 * Returns the number of source lines.
402 * @return {number} 406 * @return {number}
403 * Number of source lines. 407 * Number of source lines.
404 */ 408 */
405 Script.prototype.lineCount = function() { 409 Script.prototype.lineCount = function() {
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 return this.name + ": " + FormatMessage({ type: type, args: this.arguments } ); 892 return this.name + ": " + FormatMessage({ type: type, args: this.arguments } );
889 } 893 }
890 var message = this.message; 894 var message = this.message;
891 return this.name + (message ? (": " + message) : ""); 895 return this.name + (message ? (": " + message) : "");
892 }, DONT_ENUM); 896 }, DONT_ENUM);
893 897
894 898
895 // Boilerplate for exceptions for stack overflows. Used from 899 // Boilerplate for exceptions for stack overflows. Used from
896 // Top::StackOverflow(). 900 // Top::StackOverflow().
897 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []); 901 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []);
OLDNEW
« no previous file with comments | « src/handles.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698