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

Side by Side Diff: src/messages.js

Issue 147142: Make sure that message reporting works when the builtin string and... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | test/message/overwritten-builtins.js » ('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 19 matching lines...) Expand all
30 30
31 const kVowelSounds = {a: true, e: true, i: true, o: true, u: true, y: true}; 31 const kVowelSounds = {a: true, e: true, i: true, o: true, u: true, y: true};
32 const kCapitalVowelSounds = {a: true, e: true, i: true, o: true, u: true, 32 const kCapitalVowelSounds = {a: true, e: true, i: true, o: true, u: true,
33 h: true, f: true, l: true, m: true, n: true, r: true, s: true, x: true, 33 h: true, f: true, l: true, m: true, n: true, r: true, s: true, x: true,
34 y: true}; 34 y: true};
35 35
36 function GetInstanceName(cons) { 36 function GetInstanceName(cons) {
37 if (cons.length == 0) { 37 if (cons.length == 0) {
38 return ""; 38 return "";
39 } 39 }
40 var first = cons.charAt(0).toLowerCase(); 40 var first = %StringToLowerCase(StringCharAt.call(cons, 0));
41 var mapping = kVowelSounds; 41 var mapping = kVowelSounds;
42 if (cons.length > 1 && (cons.charAt(0) != first)) { 42 if (cons.length > 1 && (StringCharAt.call(cons, 0) != first)) {
43 // First char is upper case 43 // First char is upper case
44 var second = cons.charAt(1).toLowerCase(); 44 var second = %StringToLowerCase(StringCharAt.call(cons, 1));
45 // Second char is upper case 45 // Second char is upper case
46 if (cons.charAt(1) != second) 46 if (StringCharAt.call(cons, 1) != second)
47 mapping = kCapitalVowelSounds; 47 mapping = kCapitalVowelSounds;
48 } 48 }
49 var s = mapping[first] ? "an " : "a "; 49 var s = mapping[first] ? "an " : "a ";
50 return s + cons; 50 return s + cons;
51 } 51 }
52 52
53 53
54 const kMessages = { 54 const kMessages = {
55 // Error 55 // Error
56 cyclic_proto: "Cyclic __proto__ value", 56 cyclic_proto: "Cyclic __proto__ value",
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 circular_structure: "Converting circular structure to JSON" 119 circular_structure: "Converting circular structure to JSON"
120 }; 120 };
121 121
122 122
123 function FormatString(format, args) { 123 function FormatString(format, args) {
124 var result = format; 124 var result = format;
125 for (var i = 0; i < args.length; i++) { 125 for (var i = 0; i < args.length; i++) {
126 var str; 126 var str;
127 try { str = ToDetailString(args[i]); } 127 try { str = ToDetailString(args[i]); }
128 catch (e) { str = "#<error>"; } 128 catch (e) { str = "#<error>"; }
129 result = result.split("%" + i).join(str); 129 result = ArrayJoin.call(StringSplit.call(result, "%" + i), str);
130 } 130 }
131 return result; 131 return result;
132 } 132 }
133 133
134 134
135 function ToDetailString(obj) { 135 function ToDetailString(obj) {
136 if (obj != null && IS_OBJECT(obj) && obj.toString === $Object.prototype.toStri ng) { 136 if (obj != null && IS_OBJECT(obj) && obj.toString === $Object.prototype.toStri ng) {
137 var constructor = obj.constructor; 137 var constructor = obj.constructor;
138 if (!constructor) return ToString(obj); 138 if (!constructor) return ToString(obj);
139 var constructorName = constructor.name; 139 var constructorName = constructor.name;
140 if (!constructorName) return ToString(obj); 140 if (!constructorName) return ToString(obj);
141 return "#<" + GetInstanceName(constructorName) + ">"; 141 return "#<" + GetInstanceName(constructorName) + ">";
142 } else { 142 } else {
143 return ToString(obj); 143 return ToString(obj);
144 } 144 }
145 } 145 }
146 146
147 147
148 function MakeGenericError(constructor, type, args) { 148 function MakeGenericError(constructor, type, args) {
149 if (args instanceof $Array) { 149 if (IS_UNDEFINED(args)) {
150 for (var i = 0; i < args.length; i++) {
151 var elem = args[i];
152 if (elem instanceof $Array && elem.length > 100) { // arbitrary limit, gra b a reasonable slice to report
153 args[i] = elem.slice(0,20).concat("...");
154 }
155 }
156 } else if (IS_UNDEFINED(args)) {
157 args = []; 150 args = [];
158 } 151 }
159
160 var e = new constructor(kAddMessageAccessorsMarker); 152 var e = new constructor(kAddMessageAccessorsMarker);
161 e.type = type; 153 e.type = type;
162 e.arguments = args; 154 e.arguments = args;
163 return e; 155 return e;
164 } 156 }
165 157
166 158
167 /** 159 /**
168 * Setup the Script function and constructor. 160 * Setup the Script function and constructor.
169 */ 161 */
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 * If line is negative or not in the source null is returned. 266 * If line is negative or not in the source null is returned.
275 */ 267 */
276 Script.prototype.locationFromPosition = function (position, 268 Script.prototype.locationFromPosition = function (position,
277 include_resource_offset) { 269 include_resource_offset) {
278 var line = this.lineFromPosition(position); 270 var line = this.lineFromPosition(position);
279 if (line == -1) return null; 271 if (line == -1) return null;
280 272
281 // Determine start, end and column. 273 // Determine start, end and column.
282 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1; 274 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1;
283 var end = this.line_ends[line]; 275 var end = this.line_ends[line];
284 if (end > 0 && this.source.charAt(end - 1) == '\r') end--; 276 if (end > 0 && StringCharAt.call(this.source, end - 1) == '\r') end--;
285 var column = position - start; 277 var column = position - start;
286 278
287 // Adjust according to the offset within the resource. 279 // Adjust according to the offset within the resource.
288 if (include_resource_offset) { 280 if (include_resource_offset) {
289 line += this.line_offset; 281 line += this.line_offset;
290 if (line == this.line_offset) { 282 if (line == this.line_offset) {
291 column += this.column_offset; 283 column += this.column_offset;
292 } 284 }
293 } 285 }
294 286
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 379 }
388 380
389 // Check parameter. 381 // Check parameter.
390 if (line < 0 || this.lineCount() <= line) { 382 if (line < 0 || this.lineCount() <= line) {
391 return null; 383 return null;
392 } 384 }
393 385
394 // Return the source line. 386 // Return the source line.
395 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1; 387 var start = line == 0 ? 0 : this.line_ends[line - 1] + 1;
396 var end = this.line_ends[line]; 388 var end = this.line_ends[line];
397 return this.source.substring(start, end); 389 return StringSubstring.call(this.source, start, end);
398 } 390 }
399 391
400 392
401 /** 393 /**
402 * Returns the number of source lines. 394 * Returns the number of source lines.
403 * @return {number} 395 * @return {number}
404 * Number of source lines. 396 * Number of source lines.
405 */ 397 */
406 Script.prototype.lineCount = function() { 398 Script.prototype.lineCount = function() {
407 // Return number of source lines. 399 // Return number of source lines.
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 } 483 }
492 }; 484 };
493 485
494 486
495 /** 487 /**
496 * Get the source text for a SourceLocation 488 * Get the source text for a SourceLocation
497 * @return {String} 489 * @return {String}
498 * Source text for this location. 490 * Source text for this location.
499 */ 491 */
500 SourceLocation.prototype.sourceText = function () { 492 SourceLocation.prototype.sourceText = function () {
501 return this.script.source.substring(this.start, this.end); 493 return StringSubstring.call(this.script.source, this.start, this.end);
502 }; 494 };
503 495
504 496
505 /** 497 /**
506 * Class for a source slice. A source slice is a part of a script source with 498 * Class for a source slice. A source slice is a part of a script source with
507 * the following properties: 499 * the following properties:
508 * script : script object for the source 500 * script : script object for the source
509 * from_line : line number for the first line in the slice 501 * from_line : line number for the first line in the slice
510 * to_line : source line number for the last line in the slice 502 * to_line : source line number for the last line in the slice
511 * from_position : position of the first character in the slice 503 * from_position : position of the first character in the slice
(...skipping 16 matching lines...) Expand all
528 this.to_position = to_position; 520 this.to_position = to_position;
529 } 521 }
530 522
531 523
532 /** 524 /**
533 * Get the source text for a SourceSlice 525 * Get the source text for a SourceSlice
534 * @return {String} Source text for this slice. The last line will include 526 * @return {String} Source text for this slice. The last line will include
535 * the line terminating characters (if any) 527 * the line terminating characters (if any)
536 */ 528 */
537 SourceSlice.prototype.sourceText = function () { 529 SourceSlice.prototype.sourceText = function () {
538 return this.script.source.substring(this.from_position, this.to_position); 530 return StringSubstring.call(this.script.source, this.from_position, this.to_po sition);
539 }; 531 };
540 532
541 533
542 // Returns the offset of the given position within the containing 534 // Returns the offset of the given position within the containing
543 // line. 535 // line.
544 function GetPositionInLine(message) { 536 function GetPositionInLine(message) {
545 var location = message.script.locationFromPosition(message.startPos, false); 537 var location = message.script.locationFromPosition(message.startPos, false);
546 if (location == null) return -1; 538 if (location == null) return -1;
547 location.restrict(); 539 location.restrict();
548 return message.startPos - location.start; 540 return message.startPos - location.start;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 return this.name + ": " + FormatMessage({ type: type, args: this.arguments } ); 692 return this.name + ": " + FormatMessage({ type: type, args: this.arguments } );
701 } 693 }
702 var message = this.message; 694 var message = this.message;
703 return this.name + (message ? (": " + message) : ""); 695 return this.name + (message ? (": " + message) : "");
704 }, DONT_ENUM); 696 }, DONT_ENUM);
705 697
706 698
707 // Boilerplate for exceptions for stack overflows. Used from 699 // Boilerplate for exceptions for stack overflows. Used from
708 // Top::StackOverflow(). 700 // Top::StackOverflow().
709 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []); 701 const kStackOverflowBoilerplate = MakeRangeError('stack_overflow', []);
OLDNEW
« no previous file with comments | « no previous file | test/message/overwritten-builtins.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698