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

Side by Side Diff: src/messages.js

Issue 1106633002: Wrap messages implementation in a function. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@messages_5
Patch Set: fix and rebase Created 5 years, 8 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
« no previous file with comments | « src/messages.cc ('k') | src/mirror-debugger.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // ------------------------------------------------------------------- 5 // -------------------------------------------------------------------
6 6
7 var $errorToString;
8 var $formatMessage;
9 var $getStackTraceLine;
10 var $messageGetPositionInLine;
11 var $messageGetLineNumber;
12 var $messageGetSourceLine;
13 var $stackOverflowBoilerplate;
14 var $stackTraceSymbol;
15 var $toDetailString;
16 var $Error;
17 var $EvalError;
18 var $RangeError;
19 var $ReferenceError;
20 var $SyntaxError;
21 var $TypeError;
22 var $URIError;
23 var MakeError;
24 var MakeEvalError;
25 var MakeRangeError;
26 var MakeReferenceError;
27 var MakeSyntaxError;
28 var MakeTypeError;
29 var MakeURIError;
30 var MakeReferenceErrorEmbedded;
31 var MakeSyntaxErrorEmbedded;
32 var MakeTypeErrorEmbedded;
33
34 (function() {
35
36 %CheckIsBootstrapping();
37
38 var GlobalObject = global.Object;
39 var GlobalError;
40 var GlobalTypeError;
41 var GlobalRangeError;
42 var GlobalURIError;
43 var GlobalSyntaxError;
44 var GlobalReferenceError;
45 var GlobalEvalError;
46
47 // -------------------------------------------------------------------
48
7 var kMessages = { 49 var kMessages = {
8 // Error 50 // Error
9 constructor_is_generator: ["Class constructor may not be a generator"], 51 constructor_is_generator: ["Class constructor may not be a generator"],
10 constructor_is_accessor: ["Class constructor may not be an accessor"], 52 constructor_is_accessor: ["Class constructor may not be an accessor"],
11 // TypeError 53 // TypeError
12 unexpected_token: ["Unexpected token ", "%0"], 54 unexpected_token: ["Unexpected token ", "%0"],
13 unexpected_token_number: ["Unexpected number"], 55 unexpected_token_number: ["Unexpected number"],
14 unexpected_token_string: ["Unexpected string"], 56 unexpected_token_string: ["Unexpected string"],
15 unexpected_token_identifier: ["Unexpected identifier"], 57 unexpected_token_identifier: ["Unexpected identifier"],
16 unexpected_reserved: ["Unexpected reserved word"], 58 unexpected_reserved: ["Unexpected reserved word"],
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 } 269 }
228 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { 270 if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
229 return %_CallFunction(obj, ErrorToString); 271 return %_CallFunction(obj, ErrorToString);
230 } 272 }
231 273
232 return %_CallFunction(obj, NoSideEffectsObjectToString); 274 return %_CallFunction(obj, NoSideEffectsObjectToString);
233 } 275 }
234 276
235 // To determine whether we can safely stringify an object using ErrorToString 277 // To determine whether we can safely stringify an object using ErrorToString
236 // without the risk of side-effects, we need to check whether the object is 278 // without the risk of side-effects, we need to check whether the object is
237 // either an instance of a native error type (via '%_ClassOf'), or has $Error 279 // either an instance of a native error type (via '%_ClassOf'), or has Error
238 // in its prototype chain and hasn't overwritten 'toString' with something 280 // in its prototype chain and hasn't overwritten 'toString' with something
239 // strange and unusual. 281 // strange and unusual.
240 function CanBeSafelyTreatedAsAnErrorObject(obj) { 282 function CanBeSafelyTreatedAsAnErrorObject(obj) {
241 switch (%_ClassOf(obj)) { 283 switch (%_ClassOf(obj)) {
242 case 'Error': 284 case 'Error':
243 case 'EvalError': 285 case 'EvalError':
244 case 'RangeError': 286 case 'RangeError':
245 case 'ReferenceError': 287 case 'ReferenceError':
246 case 'SyntaxError': 288 case 'SyntaxError':
247 case 'TypeError': 289 case 'TypeError':
248 case 'URIError': 290 case 'URIError':
249 return true; 291 return true;
250 } 292 }
251 293
252 var objToString = %GetDataProperty(obj, "toString"); 294 var objToString = %GetDataProperty(obj, "toString");
253 return obj instanceof $Error && objToString === ErrorToString; 295 return obj instanceof GlobalError && objToString === ErrorToString;
254 } 296 }
255 297
256 298
257 // When formatting internally created error messages, do not 299 // When formatting internally created error messages, do not
258 // invoke overwritten error toString methods but explicitly use 300 // invoke overwritten error toString methods but explicitly use
259 // the error to string method. This is to avoid leaking error 301 // the error to string method. This is to avoid leaking error
260 // objects between script tags in a browser setting. 302 // objects between script tags in a browser setting.
261 function ToStringCheckErrorObject(obj) { 303 function ToStringCheckErrorObject(obj) {
262 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { 304 if (CanBeSafelyTreatedAsAnErrorObject(obj)) {
263 return %_CallFunction(obj, ErrorToString); 305 return %_CallFunction(obj, ErrorToString);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 // Returns the source code line containing the given source 373 // Returns the source code line containing the given source
332 // position, or the empty string if the position is invalid. 374 // position, or the empty string if the position is invalid.
333 function GetSourceLine(message) { 375 function GetSourceLine(message) {
334 var script = %MessageGetScript(message); 376 var script = %MessageGetScript(message);
335 var start_position = %MessageGetStartPosition(message); 377 var start_position = %MessageGetStartPosition(message);
336 var location = script.locationFromPosition(start_position, true); 378 var location = script.locationFromPosition(start_position, true);
337 if (location == null) return ""; 379 if (location == null) return "";
338 return location.sourceText(); 380 return location.sourceText();
339 } 381 }
340 382
341
342 function MakeError(type, arg0, arg1, arg2) {
343 return MakeGenericError($Error, type, arg0, arg1, arg2);
344 }
345
346
347 function MakeTypeError(type, arg0, arg1, arg2) {
348 return MakeGenericError($TypeError, type, arg0, arg1, arg2);
349 }
350
351
352 function MakeRangeError(type, arg0, arg1, arg2) {
353 return MakeGenericError($RangeError, type, arg0, arg1, arg2);
354 }
355
356
357 function MakeSyntaxError(type, arg0, arg1, arg2) {
358 return MakeGenericError($SyntaxError, type, arg0, arg1, arg2);
359 }
360
361
362 function MakeReferenceError(type, arg0, arg1, arg2) {
363 return MakeGenericError($ReferenceError, type, arg0, arg1, arg2);
364 }
365
366
367 function MakeEvalError(type, arg0, arg1, arg2) {
368 return MakeGenericError($EvalError, type, arg0, arg1, arg2);
369 }
370
371
372 function MakeURIError() {
373 return MakeGenericError($URIError, kURIMalformed);
374 }
375
376 // The embedded versions are called from unoptimized code, with embedded
377 // arguments. Those arguments cannot be arrays, which are context-dependent.
378 function MakeTypeErrorEmbedded(type, arg) {
379 return MakeGenericError($TypeError, type, [arg]);
380 }
381
382
383 function MakeSyntaxErrorEmbedded(type, arg) {
384 return MakeGenericError($SyntaxError, type, [arg]);
385 }
386
387
388 function MakeReferenceErrorEmbedded(type, arg) {
389 return MakeGenericError($ReferenceError, type, [arg]);
390 }
391
392 /** 383 /**
393 * Find a line number given a specific source position. 384 * Find a line number given a specific source position.
394 * @param {number} position The source position. 385 * @param {number} position The source position.
395 * @return {number} 0 if input too small, -1 if input too large, 386 * @return {number} 0 if input too small, -1 if input too large,
396 else the line number. 387 else the line number.
397 */ 388 */
398 function ScriptLineFromPosition(position) { 389 function ScriptLineFromPosition(position) {
399 var lower = 0; 390 var lower = 0;
400 var upper = this.lineCount() - 1; 391 var upper = this.lineCount() - 1;
401 var line_ends = this.line_ends; 392 var line_ends = this.line_ends;
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 return frames; 1016 return frames;
1026 } 1017 }
1027 1018
1028 1019
1029 // Flag to prevent recursive call of Error.prepareStackTrace. 1020 // Flag to prevent recursive call of Error.prepareStackTrace.
1030 var formatting_custom_stack_trace = false; 1021 var formatting_custom_stack_trace = false;
1031 1022
1032 1023
1033 function FormatStackTrace(obj, raw_stack) { 1024 function FormatStackTrace(obj, raw_stack) {
1034 var frames = GetStackFrames(raw_stack); 1025 var frames = GetStackFrames(raw_stack);
1035 if (IS_FUNCTION($Error.prepareStackTrace) && !formatting_custom_stack_trace) { 1026 if (IS_FUNCTION(GlobalError.prepareStackTrace) &&
1027 !formatting_custom_stack_trace) {
1036 var array = []; 1028 var array = [];
1037 %MoveArrayContents(frames, array); 1029 %MoveArrayContents(frames, array);
1038 formatting_custom_stack_trace = true; 1030 formatting_custom_stack_trace = true;
1039 var stack_trace = UNDEFINED; 1031 var stack_trace = UNDEFINED;
1040 try { 1032 try {
1041 stack_trace = $Error.prepareStackTrace(obj, array); 1033 stack_trace = GlobalError.prepareStackTrace(obj, array);
1042 } catch (e) { 1034 } catch (e) {
1043 throw e; // The custom formatting function threw. Rethrow. 1035 throw e; // The custom formatting function threw. Rethrow.
1044 } finally { 1036 } finally {
1045 formatting_custom_stack_trace = false; 1037 formatting_custom_stack_trace = false;
1046 } 1038 }
1047 return stack_trace; 1039 return stack_trace;
1048 } 1040 }
1049 1041
1050 var lines = new InternalArray(); 1042 var lines = new InternalArray();
1051 lines.push(FormatErrorString(obj)); 1043 lines.push(FormatErrorString(obj));
(...skipping 23 matching lines...) Expand all
1075 %_CallFunction(receiver, NoSideEffectsObjectToString); 1067 %_CallFunction(receiver, NoSideEffectsObjectToString);
1076 } 1068 }
1077 var constructorName = constructor.name; 1069 var constructorName = constructor.name;
1078 if (!constructorName) { 1070 if (!constructorName) {
1079 return requireConstructor ? null : 1071 return requireConstructor ? null :
1080 %_CallFunction(receiver, NoSideEffectsObjectToString); 1072 %_CallFunction(receiver, NoSideEffectsObjectToString);
1081 } 1073 }
1082 return constructorName; 1074 return constructorName;
1083 } 1075 }
1084 1076
1085
1086 var stack_trace_symbol; // Set during bootstrapping.
1087 var formatted_stack_trace_symbol = NEW_PRIVATE_OWN("formatted stack trace"); 1077 var formatted_stack_trace_symbol = NEW_PRIVATE_OWN("formatted stack trace");
1088 1078
1089 1079
1090 // Format the stack trace if not yet done, and return it. 1080 // Format the stack trace if not yet done, and return it.
1091 // Cache the formatted stack trace on the holder. 1081 // Cache the formatted stack trace on the holder.
1092 var StackTraceGetter = function() { 1082 var StackTraceGetter = function() {
1093 var formatted_stack_trace = UNDEFINED; 1083 var formatted_stack_trace = UNDEFINED;
1094 var holder = this; 1084 var holder = this;
1095 while (holder) { 1085 while (holder) {
1096 var formatted_stack_trace = 1086 var formatted_stack_trace =
1097 GET_PRIVATE(holder, formatted_stack_trace_symbol); 1087 GET_PRIVATE(holder, formatted_stack_trace_symbol);
1098 if (IS_UNDEFINED(formatted_stack_trace)) { 1088 if (IS_UNDEFINED(formatted_stack_trace)) {
1099 // No formatted stack trace available. 1089 // No formatted stack trace available.
1100 var stack_trace = GET_PRIVATE(holder, stack_trace_symbol); 1090 var stack_trace = GET_PRIVATE(holder, $stackTraceSymbol);
1101 if (IS_UNDEFINED(stack_trace)) { 1091 if (IS_UNDEFINED(stack_trace)) {
1102 // Neither formatted nor structured stack trace available. 1092 // Neither formatted nor structured stack trace available.
1103 // Look further up the prototype chain. 1093 // Look further up the prototype chain.
1104 holder = %_GetPrototype(holder); 1094 holder = %_GetPrototype(holder);
1105 continue; 1095 continue;
1106 } 1096 }
1107 formatted_stack_trace = FormatStackTrace(holder, stack_trace); 1097 formatted_stack_trace = FormatStackTrace(holder, stack_trace);
1108 SET_PRIVATE(holder, stack_trace_symbol, UNDEFINED); 1098 SET_PRIVATE(holder, $stackTraceSymbol, UNDEFINED);
1109 SET_PRIVATE(holder, formatted_stack_trace_symbol, formatted_stack_trace); 1099 SET_PRIVATE(holder, formatted_stack_trace_symbol, formatted_stack_trace);
1110 } 1100 }
1111 return formatted_stack_trace; 1101 return formatted_stack_trace;
1112 } 1102 }
1113 return UNDEFINED; 1103 return UNDEFINED;
1114 }; 1104 };
1115 1105
1116 1106
1117 // If the receiver equals the holder, set the formatted stack trace that the 1107 // If the receiver equals the holder, set the formatted stack trace that the
1118 // getter returns. 1108 // getter returns.
1119 var StackTraceSetter = function(v) { 1109 var StackTraceSetter = function(v) {
1120 if (HAS_PRIVATE(this, stack_trace_symbol)) { 1110 if (HAS_PRIVATE(this, $stackTraceSymbol)) {
1121 SET_PRIVATE(this, stack_trace_symbol, UNDEFINED); 1111 SET_PRIVATE(this, $stackTraceSymbol, UNDEFINED);
1122 SET_PRIVATE(this, formatted_stack_trace_symbol, v); 1112 SET_PRIVATE(this, formatted_stack_trace_symbol, v);
1123 } 1113 }
1124 }; 1114 };
1125 1115
1126 1116
1127 // Use a dummy function since we do not actually want to capture a stack trace 1117 // Use a dummy function since we do not actually want to capture a stack trace
1128 // when constructing the initial Error prototytpes. 1118 // when constructing the initial Error prototytpes.
1129 var captureStackTrace = function captureStackTrace(obj, cons_opt) { 1119 var captureStackTrace = function captureStackTrace(obj, cons_opt) {
1130 // Define accessors first, as this may fail and throw. 1120 // Define accessors first, as this may fail and throw.
1131 ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter, 1121 ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter,
1132 set: StackTraceSetter, 1122 set: StackTraceSetter,
1133 configurable: true }); 1123 configurable: true });
1134 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace); 1124 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace);
1135 } 1125 }
1136 1126
1137 1127
1138 function SetUpError() { 1128 // Define special error type constructors.
1139 // Define special error type constructors. 1129 function DefineError(f) {
1130 // Store the error function in both the global object
1131 // and the runtime object. The function is fetched
1132 // from the runtime object when throwing errors from
1133 // within the runtime system to avoid strange side
1134 // effects when overwriting the error functions from
1135 // user code.
1136 var name = f.name;
1137 %AddNamedProperty(global, name, f, DONT_ENUM);
1138 // Configure the error function.
1139 if (name == 'Error') {
1140 // The prototype of the Error object must itself be an error.
1141 // However, it can't be an instance of the Error object because
1142 // it hasn't been properly configured yet. Instead we create a
1143 // special not-a-true-error-but-close-enough object.
1144 var ErrorPrototype = function() {};
1145 %FunctionSetPrototype(ErrorPrototype, GlobalObject.prototype);
1146 %FunctionSetInstanceClassName(ErrorPrototype, 'Error');
1147 %FunctionSetPrototype(f, new ErrorPrototype());
1148 } else {
1149 %FunctionSetPrototype(f, new GlobalError());
1150 %InternalSetPrototype(f, GlobalError);
1151 }
1152 %FunctionSetInstanceClassName(f, 'Error');
1153 %AddNamedProperty(f.prototype, 'constructor', f, DONT_ENUM);
1154 %AddNamedProperty(f.prototype, 'name', name, DONT_ENUM);
1155 %SetCode(f, function(m) {
1156 if (%_IsConstructCall()) {
1157 try { captureStackTrace(this, f); } catch (e) { }
1158 // Define all the expected properties directly on the error
1159 // object. This avoids going through getters and setters defined
1160 // on prototype objects.
1161 if (!IS_UNDEFINED(m)) {
1162 %AddNamedProperty(this, 'message', ToString(m), DONT_ENUM);
1163 }
1164 } else {
1165 return new f(m);
1166 }
1167 });
1168 %SetNativeFlag(f);
1169 return f;
1170 };
1140 1171
1141 var DefineError = function(f) { 1172 GlobalError = DefineError(function Error() { });
1142 // Store the error function in both the global object 1173 GlobalEvalError = DefineError(function EvalError() { });
1143 // and the runtime object. The function is fetched 1174 GlobalRangeError = DefineError(function RangeError() { });
1144 // from the runtime object when throwing errors from 1175 GlobalReferenceError = DefineError(function ReferenceError() { });
1145 // within the runtime system to avoid strange side 1176 GlobalSyntaxError = DefineError(function SyntaxError() { });
1146 // effects when overwriting the error functions from 1177 GlobalTypeError = DefineError(function TypeError() { });
1147 // user code. 1178 GlobalURIError = DefineError(function URIError() { });
1148 var name = f.name;
1149 %AddNamedProperty(global, name, f, DONT_ENUM);
1150 %AddNamedProperty(builtins, '$' + name, f,
1151 DONT_ENUM | DONT_DELETE | READ_ONLY);
1152 // Configure the error function.
1153 if (name == 'Error') {
1154 // The prototype of the Error object must itself be an error.
1155 // However, it can't be an instance of the Error object because
1156 // it hasn't been properly configured yet. Instead we create a
1157 // special not-a-true-error-but-close-enough object.
1158 var ErrorPrototype = function() {};
1159 %FunctionSetPrototype(ErrorPrototype, $Object.prototype);
1160 %FunctionSetInstanceClassName(ErrorPrototype, 'Error');
1161 %FunctionSetPrototype(f, new ErrorPrototype());
1162 } else {
1163 %FunctionSetPrototype(f, new $Error());
1164 %InternalSetPrototype(f, $Error);
1165 }
1166 %FunctionSetInstanceClassName(f, 'Error');
1167 %AddNamedProperty(f.prototype, 'constructor', f, DONT_ENUM);
1168 %AddNamedProperty(f.prototype, 'name', name, DONT_ENUM);
1169 %SetCode(f, function(m) {
1170 if (%_IsConstructCall()) {
1171 try { captureStackTrace(this, f); } catch (e) { }
1172 // Define all the expected properties directly on the error
1173 // object. This avoids going through getters and setters defined
1174 // on prototype objects.
1175 if (!IS_UNDEFINED(m)) {
1176 %AddNamedProperty(this, 'message', ToString(m), DONT_ENUM);
1177 }
1178 } else {
1179 return new f(m);
1180 }
1181 });
1182 %SetNativeFlag(f);
1183 };
1184 1179
1185 DefineError(function Error() { });
1186 DefineError(function TypeError() { });
1187 DefineError(function RangeError() { });
1188 DefineError(function SyntaxError() { });
1189 DefineError(function ReferenceError() { });
1190 DefineError(function EvalError() { });
1191 DefineError(function URIError() { });
1192 }
1193 1180
1194 SetUpError(); 1181 GlobalError.captureStackTrace = captureStackTrace;
1195 1182
1196 $Error.captureStackTrace = captureStackTrace; 1183 %AddNamedProperty(GlobalError.prototype, 'message', '', DONT_ENUM);
1197
1198 %AddNamedProperty($Error.prototype, 'message', '', DONT_ENUM);
1199 1184
1200 // Global list of error objects visited during ErrorToString. This is 1185 // Global list of error objects visited during ErrorToString. This is
1201 // used to detect cycles in error toString formatting. 1186 // used to detect cycles in error toString formatting.
1202 var visited_errors = new InternalArray(); 1187 var visited_errors = new InternalArray();
1203 var cyclic_error_marker = new $Object(); 1188 var cyclic_error_marker = new GlobalObject();
1204 1189
1205 function GetPropertyWithoutInvokingMonkeyGetters(error, name) { 1190 function GetPropertyWithoutInvokingMonkeyGetters(error, name) {
1206 var current = error; 1191 var current = error;
1207 // Climb the prototype chain until we find the holder. 1192 // Climb the prototype chain until we find the holder.
1208 while (current && !%HasOwnProperty(current, name)) { 1193 while (current && !%HasOwnProperty(current, name)) {
1209 current = %_GetPrototype(current); 1194 current = %_GetPrototype(current);
1210 } 1195 }
1211 if (IS_NULL(current)) return UNDEFINED; 1196 if (IS_NULL(current)) return UNDEFINED;
1212 if (!IS_OBJECT(current)) return error[name]; 1197 if (!IS_OBJECT(current)) return error[name];
1213 // If the property is an accessor on one of the predefined errors that can be 1198 // If the property is an accessor on one of the predefined errors that can be
1214 // generated statically by the compiler, don't touch it. This is to address 1199 // generated statically by the compiler, don't touch it. This is to address
1215 // http://code.google.com/p/chromium/issues/detail?id=69187 1200 // http://code.google.com/p/chromium/issues/detail?id=69187
1216 var desc = %GetOwnProperty(current, name); 1201 var desc = %GetOwnProperty(current, name);
1217 if (desc && desc[IS_ACCESSOR_INDEX]) { 1202 if (desc && desc[IS_ACCESSOR_INDEX]) {
1218 var isName = name === "name"; 1203 var isName = name === "name";
1219 if (current === $ReferenceError.prototype) 1204 if (current === GlobalReferenceError.prototype)
1220 return isName ? "ReferenceError" : UNDEFINED; 1205 return isName ? "ReferenceError" : UNDEFINED;
1221 if (current === $SyntaxError.prototype) 1206 if (current === GlobalSyntaxError.prototype)
1222 return isName ? "SyntaxError" : UNDEFINED; 1207 return isName ? "SyntaxError" : UNDEFINED;
1223 if (current === $TypeError.prototype) 1208 if (current === GlobalTypeError.prototype)
1224 return isName ? "TypeError" : UNDEFINED; 1209 return isName ? "TypeError" : UNDEFINED;
1225 } 1210 }
1226 // Otherwise, read normally. 1211 // Otherwise, read normally.
1227 return error[name]; 1212 return error[name];
1228 } 1213 }
1229 1214
1230 function ErrorToStringDetectCycle(error) { 1215 function ErrorToStringDetectCycle(error) {
1231 if (!%PushIfAbsent(visited_errors, error)) throw cyclic_error_marker; 1216 if (!%PushIfAbsent(visited_errors, error)) throw cyclic_error_marker;
1232 try { 1217 try {
1233 var name = GetPropertyWithoutInvokingMonkeyGetters(error, "name"); 1218 var name = GetPropertyWithoutInvokingMonkeyGetters(error, "name");
(...skipping 18 matching lines...) Expand all
1252 } catch(e) { 1237 } catch(e) {
1253 // If this error message was encountered already return the empty 1238 // If this error message was encountered already return the empty
1254 // string for it instead of recursively formatting it. 1239 // string for it instead of recursively formatting it.
1255 if (e === cyclic_error_marker) { 1240 if (e === cyclic_error_marker) {
1256 return ''; 1241 return '';
1257 } 1242 }
1258 throw e; 1243 throw e;
1259 } 1244 }
1260 } 1245 }
1261 1246
1247 InstallFunctions(GlobalError.prototype, DONT_ENUM, ['toString', ErrorToString]);
1262 1248
1263 InstallFunctions($Error.prototype, DONT_ENUM, ['toString', ErrorToString]); 1249 $errorToString = ErrorToString;
1250 $formatMessage = FormatMessage;
1251 $getStackTraceLine = GetStackTraceLine;
1252 $messageGetPositionInLine = GetPositionInLine;
1253 $messageGetLineNumber = GetLineNumber;
1254 $messageGetSourceLine = GetSourceLine;
1255 $toDetailString = ToDetailString;
1264 1256
1265 // Boilerplate for exceptions for stack overflows. Used from 1257 $Error = GlobalError;
1266 // Isolate::StackOverflow(). 1258 $EvalError = GlobalEvalError;
1267 function SetUpStackOverflowBoilerplate() { 1259 $RangeError = GlobalRangeError;
1268 var boilerplate = MakeRangeError(kStackOverflow); 1260 $ReferenceError = GlobalReferenceError;
1261 $SyntaxError = GlobalSyntaxError;
1262 $TypeError = GlobalTypeError;
1263 $URIError = GlobalURIError;
1269 1264
1270 %DefineAccessorPropertyUnchecked( 1265 MakeError = function(type, arg0, arg1, arg2) {
1271 boilerplate, 'stack', StackTraceGetter, StackTraceSetter, DONT_ENUM); 1266 return MakeGenericError(GlobalError, type, arg0, arg1, arg2);
1272
1273 return boilerplate;
1274 } 1267 }
1275 1268
1276 var kStackOverflowBoilerplate = SetUpStackOverflowBoilerplate(); 1269 MakeEvalError = function(type, arg0, arg1, arg2) {
1270 return MakeGenericError(GlobalEvalError, type, arg0, arg1, arg2);
1271 }
1272
1273 MakeRangeError = function(type, arg0, arg1, arg2) {
1274 return MakeGenericError(GlobalRangeError, type, arg0, arg1, arg2);
1275 }
1276
1277 MakeReferenceError = function(type, arg0, arg1, arg2) {
1278 return MakeGenericError(GlobalReferenceError, type, arg0, arg1, arg2);
1279 }
1280
1281 MakeSyntaxError = function(type, arg0, arg1, arg2) {
1282 return MakeGenericError(GlobalSyntaxError, type, arg0, arg1, arg2);
1283 }
1284
1285 MakeTypeError = function(type, arg0, arg1, arg2) {
1286 return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2);
1287 }
1288
1289 MakeURIError = function() {
1290 return MakeGenericError(GlobalURIError, kURIMalformed);
1291 }
1292
1293 // The embedded versions are called from unoptimized code, with embedded
1294 // arguments. Those arguments cannot be arrays, which are context-dependent.
1295 MakeSyntaxErrorEmbedded = function(type, arg) {
1296 return MakeGenericError(GlobalSyntaxError, type, [arg]);
1297 }
1298
1299 MakeReferenceErrorEmbedded = function(type, arg) {
1300 return MakeGenericError(GlobalReferenceError, type, [arg]);
1301 }
1302
1303 MakeTypeErrorEmbedded = function(type, arg) {
1304 return MakeGenericError(GlobalTypeError, type, [arg]);
1305 }
1306
1307 //Boilerplate for exceptions for stack overflows. Used from
1308 //Isolate::StackOverflow().
1309 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow);
1310 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack',
1311 StackTraceGetter, StackTraceSetter, DONT_ENUM);
1312
1313 })();
OLDNEW
« no previous file with comments | « src/messages.cc ('k') | src/mirror-debugger.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698