| OLD | NEW |
| 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 kMessages = { | 7 var kMessages = { |
| 8 // Error | 8 // Error |
| 9 cyclic_proto: ["Cyclic __proto__ value"], | 9 cyclic_proto: ["Cyclic __proto__ value"], |
| 10 code_gen_from_strings: ["%0"], | 10 code_gen_from_strings: ["%0"], |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 if (IS_NULL(obj)) return 'null'; | 216 if (IS_NULL(obj)) return 'null'; |
| 217 if (IS_FUNCTION(obj)) { | 217 if (IS_FUNCTION(obj)) { |
| 218 var str = %_CallFunction(obj, FunctionToString); | 218 var str = %_CallFunction(obj, FunctionToString); |
| 219 if (str.length > 128) { | 219 if (str.length > 128) { |
| 220 str = %_SubString(str, 0, 111) + "...<omitted>..." + | 220 str = %_SubString(str, 0, 111) + "...<omitted>..." + |
| 221 %_SubString(str, str.length - 2, str.length); | 221 %_SubString(str, str.length - 2, str.length); |
| 222 } | 222 } |
| 223 return str; | 223 return str; |
| 224 } | 224 } |
| 225 if (IS_SYMBOL(obj)) return %_CallFunction(obj, SymbolToString); | 225 if (IS_SYMBOL(obj)) return %_CallFunction(obj, SymbolToString); |
| 226 if (IS_OBJECT(obj) && %GetDataProperty(obj, "toString") === ObjectToString) { | 226 if (IS_OBJECT(obj) |
| 227 && %GetDataProperty(obj, "toString") === DefaultObjectToString) { |
| 227 var constructor = %GetDataProperty(obj, "constructor"); | 228 var constructor = %GetDataProperty(obj, "constructor"); |
| 228 if (typeof constructor == "function") { | 229 if (typeof constructor == "function") { |
| 229 var constructorName = constructor.name; | 230 var constructorName = constructor.name; |
| 230 if (IS_STRING(constructorName) && constructorName !== "") { | 231 if (IS_STRING(constructorName) && constructorName !== "") { |
| 231 return "#<" + constructorName + ">"; | 232 return "#<" + constructorName + ">"; |
| 232 } | 233 } |
| 233 } | 234 } |
| 234 } | 235 } |
| 235 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { | 236 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { |
| 236 return %_CallFunction(obj, ErrorToString); | 237 return %_CallFunction(obj, ErrorToString); |
| 237 } | 238 } |
| 238 return %_CallFunction(obj, ObjectToString); | 239 |
| 240 return %_CallFunction(obj, NoSideEffectsObjectToString); |
| 239 } | 241 } |
| 240 | 242 |
| 241 // To determine whether we can safely stringify an object using ErrorToString | 243 // To determine whether we can safely stringify an object using ErrorToString |
| 242 // without the risk of side-effects, we need to check whether the object is | 244 // without the risk of side-effects, we need to check whether the object is |
| 243 // either an instance of a native error type (via '%_ClassOf'), or has $Error | 245 // either an instance of a native error type (via '%_ClassOf'), or has $Error |
| 244 // in its prototype chain and hasn't overwritten 'toString' with something | 246 // in its prototype chain and hasn't overwritten 'toString' with something |
| 245 // strange and unusual. | 247 // strange and unusual. |
| 246 function CanBeSafelyTreatedAsAnErrorObject(obj) { | 248 function CanBeSafelyTreatedAsAnErrorObject(obj) { |
| 247 switch (%_ClassOf(obj)) { | 249 switch (%_ClassOf(obj)) { |
| 248 case 'Error': | 250 case 'Error': |
| (...skipping 18 matching lines...) Expand all Loading... |
| 267 function ToStringCheckErrorObject(obj) { | 269 function ToStringCheckErrorObject(obj) { |
| 268 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { | 270 if (CanBeSafelyTreatedAsAnErrorObject(obj)) { |
| 269 return %_CallFunction(obj, ErrorToString); | 271 return %_CallFunction(obj, ErrorToString); |
| 270 } else { | 272 } else { |
| 271 return ToString(obj); | 273 return ToString(obj); |
| 272 } | 274 } |
| 273 } | 275 } |
| 274 | 276 |
| 275 | 277 |
| 276 function ToDetailString(obj) { | 278 function ToDetailString(obj) { |
| 277 if (obj != null && IS_OBJECT(obj) && obj.toString === ObjectToString) { | 279 if (obj != null && IS_OBJECT(obj) && obj.toString === DefaultObjectToString) { |
| 278 var constructor = obj.constructor; | 280 var constructor = obj.constructor; |
| 279 if (typeof constructor == "function") { | 281 if (typeof constructor == "function") { |
| 280 var constructorName = constructor.name; | 282 var constructorName = constructor.name; |
| 281 if (IS_STRING(constructorName) && constructorName !== "") { | 283 if (IS_STRING(constructorName) && constructorName !== "") { |
| 282 return "#<" + constructorName + ">"; | 284 return "#<" + constructorName + ">"; |
| 283 } | 285 } |
| 284 } | 286 } |
| 285 } | 287 } |
| 286 return ToStringCheckErrorObject(obj); | 288 return ToStringCheckErrorObject(obj); |
| 287 } | 289 } |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1098 lines.push(" at " + line); | 1100 lines.push(" at " + line); |
| 1099 } | 1101 } |
| 1100 return %_CallFunction(lines, "\n", ArrayJoin); | 1102 return %_CallFunction(lines, "\n", ArrayJoin); |
| 1101 } | 1103 } |
| 1102 | 1104 |
| 1103 | 1105 |
| 1104 function GetTypeName(receiver, requireConstructor) { | 1106 function GetTypeName(receiver, requireConstructor) { |
| 1105 var constructor = receiver.constructor; | 1107 var constructor = receiver.constructor; |
| 1106 if (!constructor) { | 1108 if (!constructor) { |
| 1107 return requireConstructor ? null : | 1109 return requireConstructor ? null : |
| 1108 %_CallFunction(receiver, ObjectToString); | 1110 %_CallFunction(receiver, NoSideEffectsObjectToString); |
| 1109 } | 1111 } |
| 1110 var constructorName = constructor.name; | 1112 var constructorName = constructor.name; |
| 1111 if (!constructorName) { | 1113 if (!constructorName) { |
| 1112 return requireConstructor ? null : | 1114 return requireConstructor ? null : |
| 1113 %_CallFunction(receiver, ObjectToString); | 1115 %_CallFunction(receiver, NoSideEffectsObjectToString); |
| 1114 } | 1116 } |
| 1115 return constructorName; | 1117 return constructorName; |
| 1116 } | 1118 } |
| 1117 | 1119 |
| 1118 | 1120 |
| 1119 var stack_trace_symbol; // Set during bootstrapping. | 1121 var stack_trace_symbol; // Set during bootstrapping. |
| 1120 var formatted_stack_trace_symbol = NEW_PRIVATE_OWN("formatted stack trace"); | 1122 var formatted_stack_trace_symbol = NEW_PRIVATE_OWN("formatted stack trace"); |
| 1121 | 1123 |
| 1122 | 1124 |
| 1123 // Format the stack trace if not yet done, and return it. | 1125 // Format the stack trace if not yet done, and return it. |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1300 function SetUpStackOverflowBoilerplate() { | 1302 function SetUpStackOverflowBoilerplate() { |
| 1301 var boilerplate = MakeRangeError('stack_overflow', []); | 1303 var boilerplate = MakeRangeError('stack_overflow', []); |
| 1302 | 1304 |
| 1303 %DefineAccessorPropertyUnchecked( | 1305 %DefineAccessorPropertyUnchecked( |
| 1304 boilerplate, 'stack', StackTraceGetter, StackTraceSetter, DONT_ENUM); | 1306 boilerplate, 'stack', StackTraceGetter, StackTraceSetter, DONT_ENUM); |
| 1305 | 1307 |
| 1306 return boilerplate; | 1308 return boilerplate; |
| 1307 } | 1309 } |
| 1308 | 1310 |
| 1309 var kStackOverflowBoilerplate = SetUpStackOverflowBoilerplate(); | 1311 var kStackOverflowBoilerplate = SetUpStackOverflowBoilerplate(); |
| OLD | NEW |