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

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

Powered by Google App Engine
This is Rietveld 408576698