فهرست منبع

Enable @@toStringTag by default

Tom Care 9 سال پیش
والد
کامیت
76f0ff1ada

+ 1 - 1
lib/Common/ConfigFlagsList.h

@@ -533,7 +533,7 @@ PHASE(All)
 #endif
 #define DEFAULT_CONFIG_ES6ToPrimitive          (false)
 #define DEFAULT_CONFIG_ES6ToLength             (false)
-#define DEFAULT_CONFIG_ES6ToStringTag          (false)
+#define DEFAULT_CONFIG_ES6ToStringTag          (true)
 #define DEFAULT_CONFIG_ES6Unicode              (true)
 #define DEFAULT_CONFIG_ES6UnicodeVerbose       (true)
 #define DEFAULT_CONFIG_ES6Unscopables          (true)

+ 17 - 1
lib/Runtime/Library/JavascriptObject.cpp

@@ -457,9 +457,25 @@ namespace Js
 
             // 14. Else, let builtinTag be "Object".
         default:
-            builtInTag = library->GetObjectDisplayString(); // [object Object]
+        {
+            if (thisArgAsObject->IsExternal())
+            {
+                CompoundString::Builder<32> stringBuilder(scriptContext);
+
+                stringBuilder.AppendChars(_u("[object "));
+
+                stringBuilder.AppendChars(thisArgAsObject->GetClassName(scriptContext));
+                stringBuilder.AppendChars(_u(']'));
+
+                return stringBuilder.ToString();
+            }
+            else
+            {
+                builtInTag = library->GetObjectDisplayString(); // [object Object]
+            }
             break;
         }
+        }
 
         Assert(builtInTag != nullptr);
 

+ 11 - 14
test/es6/ES6TypedArrayExtensions.js

@@ -456,21 +456,18 @@ var tests = [
             var typedArrayPrototype = Int8Array.prototype.__proto__;
             var descriptor = Object.getOwnPropertyDescriptor(typedArrayPrototype, Symbol.toStringTag);
 
-            assert.throws(function () { typedArrayPrototype.length; }, TypeError, "%TypedArrayPrototype%[@@toStringTag] throws TypeError if called with no parameter", "'this' is not a typed array object");
-            assert.throws(function () { descriptor.get(); }, TypeError, "%TypedArrayPrototype%[@@toStringTag] throws TypeError if called with no parameter", "'this' is not a typed array object");
-            assert.throws(function () { descriptor.get.call(); }, TypeError, "%TypedArrayPrototype%[@@toStringTag] throws TypeError if called with no parameter", "'this' is not a typed array object");
-            assert.throws(function () { descriptor.get.call(undefined); }, TypeError, "%TypedArrayPrototype%[@@toStringTag] throws TypeError if called with no parameter", "'this' is not a typed array object");
-            assert.throws(function () { descriptor.get.call([1,2,3]); }, TypeError, "%TypedArrayPrototype%[@@toStringTag] throws TypeError if called with a non-TypedArray parameter", "'this' is not a typed array object");
-
-            assert.areEqual('Int8Array', new Int8Array(10)[Symbol.toStringTag], "new Int8Array()[@@toStringTag] === 'Int8Array'");
-            assert.areEqual('Uint8Array', new Uint8Array(10)[Symbol.toStringTag], "new Uint8Array()[@@toStringTag] === 'Uint8Array'");
+            assert.throws(function () { typedArrayPrototype.length; }, TypeError, "%TypedArrayPrototype%[length] throws TypeError if called with no parameter", "'this' is not a typed array object");
+            assert.areEqual(undefined, descriptor.get.call(), "%TypedArrayPrototype%[@@toStringTag] returns undefined if called with no parameter");
+
+            assert.areEqual('Int8Array',         new Int8Array(10)[Symbol.toStringTag],         "new Int8Array()[@@toStringTag] === 'Int8Array'");
+            assert.areEqual('Uint8Array',        new Uint8Array(10)[Symbol.toStringTag],        "new Uint8Array()[@@toStringTag] === 'Uint8Array'");
             assert.areEqual('Uint8ClampedArray', new Uint8ClampedArray(10)[Symbol.toStringTag], "new Uint8ClampedArray()[@@toStringTag] === 'Uint8ClampedArray'");
-            assert.areEqual('Int16Array', new Int16Array(10)[Symbol.toStringTag], "new Int16Array()[@@toStringTag] === 'Int16Array'");
-            assert.areEqual('Uint16Array', new Uint16Array(10)[Symbol.toStringTag], "new Uint16Array()[@@toStringTag] === 'Uint16Array'");
-            assert.areEqual('Int32Array', new Int32Array(10)[Symbol.toStringTag], "new Int32Array()[@@toStringTag] === 'Int32Array'");
-            assert.areEqual('Uint32Array', new Uint32Array(10)[Symbol.toStringTag], "new Uint32Array()[@@toStringTag] === 'Uint32Array'");
-            assert.areEqual('Float32Array', new Float32Array(10)[Symbol.toStringTag], "new Float32Array()[@@toStringTag] === 'Float32Array'");
-            assert.areEqual('Float64Array', new Float64Array(10)[Symbol.toStringTag], "new Float64Array()[@@toStringTag] === 'Float64Array'");
+            assert.areEqual('Int16Array',        new Int16Array(10)[Symbol.toStringTag],        "new Int16Array()[@@toStringTag] === 'Int16Array'");
+            assert.areEqual('Uint16Array',       new Uint16Array(10)[Symbol.toStringTag],       "new Uint16Array()[@@toStringTag] === 'Uint16Array'");
+            assert.areEqual('Int32Array',        new Int32Array(10)[Symbol.toStringTag],        "new Int32Array()[@@toStringTag] === 'Int32Array'");
+            assert.areEqual('Uint32Array',       new Uint32Array(10)[Symbol.toStringTag],       "new Uint32Array()[@@toStringTag] === 'Uint32Array'");
+            assert.areEqual('Float32Array',      new Float32Array(10)[Symbol.toStringTag],      "new Float32Array()[@@toStringTag] === 'Float32Array'");
+            assert.areEqual('Float64Array',      new Float64Array(10)[Symbol.toStringTag],      "new Float64Array()[@@toStringTag] === 'Float64Array'");
         }
     },
     {

+ 2 - 2
test/es6/es6_stable.baseline

@@ -59,8 +59,8 @@ FLAG ES6 = 1 - setting child flag ES6ToPrimitive = 0
 FLAG ES6ToPrimitive = 0
 FLAG ES6 = 1 - setting child flag ES6ToLength = 0
 FLAG ES6ToLength = 0
-FLAG ES6 = 1 - setting child flag ES6ToStringTag = 0
-FLAG ES6ToStringTag = 0
+FLAG ES6 = 1 - setting child flag ES6ToStringTag = 1
+FLAG ES6ToStringTag = 1
 FLAG ES6 = 1 - setting child flag ES6Unicode = 1
 FLAG ES6Unicode = 1
 FLAG ES6 = 1 - setting child flag ES6UnicodeVerbose = 1

+ 2 - 2
test/es6/es6_stable.enable_disable.baseline

@@ -59,8 +59,8 @@ FLAG ES6 = 1 - setting child flag ES6ToPrimitive = 0
 FLAG ES6ToPrimitive = 0
 FLAG ES6 = 1 - setting child flag ES6ToLength = 0
 FLAG ES6ToLength = 0
-FLAG ES6 = 1 - setting child flag ES6ToStringTag = 0
-FLAG ES6ToStringTag = 0
+FLAG ES6 = 1 - setting child flag ES6ToStringTag = 1
+FLAG ES6ToStringTag = 1
 FLAG ES6 = 1 - setting child flag ES6Unicode = 1
 FLAG ES6Unicode = 1
 FLAG ES6 = 1 - setting child flag ES6UnicodeVerbose = 1

+ 3 - 3
test/typedarray/arraybufferType.baseline

@@ -1,7 +1,7 @@
-[object Object]
-[object Object]
+[object ArrayBuffer]
+[object ArrayBuffer]
 20
-[object Object]
+[object ArrayBuffer]
 aaa = 20
 foo = 20
 bar = 42