Chromium Code Reviews| 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 // This file relies on the fact that the following declarations have been made | 5 // This file relies on the fact that the following declarations have been made |
| 6 // in runtime.js: | 6 // in runtime.js: |
| 7 // var $Object = global.Object; | 7 // var $Object = global.Object; |
| 8 // var $Boolean = global.Boolean; | 8 // var $Boolean = global.Boolean; |
| 9 // var $Number = global.Number; | 9 // var $Number = global.Number; |
| 10 // var $Function = global.Function; | 10 // var $Function = global.Function; |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 207 "parseFloat", GlobalParseFloat, | 207 "parseFloat", GlobalParseFloat, |
| 208 "eval", GlobalEval | 208 "eval", GlobalEval |
| 209 )); | 209 )); |
| 210 } | 210 } |
| 211 | 211 |
| 212 SetUpGlobal(); | 212 SetUpGlobal(); |
| 213 | 213 |
| 214 | 214 |
| 215 // ---------------------------------------------------------------------------- | 215 // ---------------------------------------------------------------------------- |
| 216 // Object | 216 // Object |
| 217 var kBuiltinStringTags = { | |
|
caitp (gmail)
2014/10/10 14:56:28
ObjectCreate(null) would be better, I guess
rossberg
2014/10/17 11:19:30
Yes, the prototype has to be null, otherwise the c
| |
| 218 "Arguments": "[object ~Arguments]", | |
| 219 "Array": "[object ~Array]", | |
| 220 "Boolean": "[object ~Boolean]", | |
| 221 "Date": "[object ~Date]", | |
| 222 "Error": "[object ~Error]", | |
| 223 "Function": "[object ~Function]", | |
| 224 "Number": "[object ~Number]", | |
| 225 "RegExp": "[object ~RegExp]", | |
| 226 "String": "[object ~String]" | |
| 227 }; | |
| 217 | 228 |
| 218 // ECMA-262 - 15.2.4.2 | 229 // ECMA-262 - 15.2.4.2 |
| 230 // ES6 draft 08-24-14, section 19.1.3.6 | |
| 219 function ObjectToString() { | 231 function ObjectToString() { |
| 220 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]"; | 232 if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]"; |
| 221 if (IS_NULL(this)) return "[object Null]"; | 233 if (IS_NULL(this)) return "[object Null]"; |
| 222 return "[object " + %_ClassOf(ToObject(this)) + "]"; | 234 var O = ToObject(this); |
| 235 var builtinTag = %_ClassOf(O); | |
| 236 var tag = O[symbolToStringTag]; | |
|
rossberg
2014/10/17 11:19:30
We need some way of putting this new behaviour beh
| |
| 237 if (IS_UNDEFINED(tag)) tag = builtinTag; | |
|
rossberg
2014/10/17 11:19:30
Style nit: new line if there is an 'else'.
| |
| 238 else { | |
| 239 if (!IS_STRING(tag)) return "[object ???]"; | |
|
rossberg
2014/10/17 11:19:30
Same here. Can also merge into an 'else if' with t
| |
| 240 else if (tag !== builtinTag && IS_STRING(kBuiltinStringTags[tag])) { | |
| 241 return kBuiltinStringTags[tag]; | |
|
arv (Not doing code reviews)
2014/10/17 14:40:51
Maybe make the kBuiltinStringTags a "set" and then
| |
| 242 } | |
| 243 } | |
| 244 return "[object " + tag + "]"; | |
| 223 } | 245 } |
| 224 | 246 |
| 225 | 247 |
| 226 // ECMA-262 - 15.2.4.3 | 248 // ECMA-262 - 15.2.4.3 |
| 227 function ObjectToLocaleString() { | 249 function ObjectToLocaleString() { |
| 228 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); | 250 CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString"); |
| 229 return this.toString(); | 251 return this.toString(); |
| 230 } | 252 } |
| 231 | 253 |
| 232 | 254 |
| (...skipping 1673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1906 } | 1928 } |
| 1907 if (!IS_SPEC_FUNCTION(method)) { | 1929 if (!IS_SPEC_FUNCTION(method)) { |
| 1908 throw MakeTypeError('not_iterable', [obj]); | 1930 throw MakeTypeError('not_iterable', [obj]); |
| 1909 } | 1931 } |
| 1910 var iterator = %_CallFunction(obj, method); | 1932 var iterator = %_CallFunction(obj, method); |
| 1911 if (!IS_SPEC_OBJECT(iterator)) { | 1933 if (!IS_SPEC_OBJECT(iterator)) { |
| 1912 throw MakeTypeError('not_an_iterator', [iterator]); | 1934 throw MakeTypeError('not_an_iterator', [iterator]); |
| 1913 } | 1935 } |
| 1914 return iterator; | 1936 return iterator; |
| 1915 } | 1937 } |
| OLD | NEW |