Chromium Code Reviews| Index: src/v8natives.js |
| diff --git a/src/v8natives.js b/src/v8natives.js |
| index 8484150248a13a2ef01467da31603fab1db88b0c..9dad17643ddc840c289ebf18f92d623aa7fdf60b 100644 |
| --- a/src/v8natives.js |
| +++ b/src/v8natives.js |
| @@ -215,11 +215,29 @@ SetUpGlobal(); |
| // ---------------------------------------------------------------------------- |
| // Object |
| -// ECMA-262 - 15.2.4.2 |
| +// ES6 draft Rev 26 - 19.1.3.6 |
| +var reservedTags = ["Arguments", "Array", "Boolean", "Date", |
| + "Error", "Function", "Number", "RegExp", "String"]; |
| function ObjectToString() { |
| if (IS_UNDEFINED(this) && !IS_UNDETECTABLE(this)) return "[object Undefined]"; |
| if (IS_NULL(this)) return "[object Null]"; |
| - return "[object " + %_ClassOf(ToObject(this)) + "]"; |
| + var O = ToObject(this); |
| + var builtinTag = %_ClassOf(O); |
| + if(reservedTags.indexOf(builtinTag) === -1){ |
|
arv (Not doing code reviews)
2014/08/11 14:40:40
Can you change this to a switch? We do not want a
|
| + builtinTag = "Object"; |
| + } |
| + var tag = builtinTag; |
| + var hasTag = %HasProperty(O, symbolToStringTag); |
| + if(hasTag){ |
| + tag = O[symbolToStringTag]; |
| + if(!IS_STRING(tag)){ |
| + tag = "???"; |
| + } |
| + if(tag !== builtinTag && reservedTags.indexOf(tag) > -1){ |
| + tag = "~" + tag; |
| + } |
| + } |
| + return "[object " + tag + "]"; |
| } |