[JSC] Rename Array#flatten to flat
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 May 2018 18:17:09 +0000 (18:17 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 May 2018 18:17:09 +0000 (18:17 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186012

Reviewed by Saam Barati.

JSTests:

* stress/array-flatten.js:
(shouldThrow):
* test262/expectations.yaml:

Source/JavaScriptCore:

Rename Array#flatten to Array#flat. This rename is done in TC39 since flatten
conflicts with the mootools' function name.

* builtins/ArrayPrototype.js:
(globalPrivate.flatIntoArray):
(flat):
(globalPrivate.flatIntoArrayWithCallback):
(flatMap):
(globalPrivate.flattenIntoArray): Deleted.
(flatten): Deleted.
(globalPrivate.flattenIntoArrayWithCallback): Deleted.
* runtime/ArrayPrototype.cpp:
(JSC::ArrayPrototype::finishCreation):

LayoutTests:

* inspector/model/remote-object-get-properties-expected.txt:
* js/Object-getOwnPropertyNames-expected.txt:
* js/script-tests/Object-getOwnPropertyNames.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232226 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/stress/array-flatten.js
JSTests/test262/expectations.yaml
LayoutTests/ChangeLog
LayoutTests/inspector/model/remote-object-get-properties-expected.txt
LayoutTests/js/Object-getOwnPropertyNames-expected.txt
LayoutTests/js/script-tests/Object-getOwnPropertyNames.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/builtins/ArrayPrototype.js
Source/JavaScriptCore/runtime/ArrayPrototype.cpp

index ca954df..6801af6 100644 (file)
@@ -1,3 +1,14 @@
+2018-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [JSC] Rename Array#flatten to flat
+        https://bugs.webkit.org/show_bug.cgi?id=186012
+
+        Reviewed by Saam Barati.
+
+        * stress/array-flatten.js:
+        (shouldThrow):
+        * test262/expectations.yaml:
+
 2018-05-23  Yusuke Suzuki  <utatane.tea@gmail.com>
 
         Upgrade test262 to May 24 version
index 7a6b29d..b1a7c08 100644 (file)
@@ -34,54 +34,54 @@ function shouldThrow(func, errorMessage) {
         throw new Error(`bad error: ${String(error)}`);
 }
 
-shouldBe([].flatten.length, 0);
-shouldBe([].flatten.name, `flatten`);
+shouldBe([].flat.length, 0);
+shouldBe([].flat.name, `flat`);
 
-shouldBeArray([].flatten(), []);
-shouldBeArray([0, 1, 2, 3, , 4].flatten(), [0, 1, 2, 3, 4]);
-shouldBeArray([,,,,,].flatten(), []);
+shouldBeArray([].flat(), []);
+shouldBeArray([0, 1, 2, 3, , 4].flat(), [0, 1, 2, 3, 4]);
+shouldBeArray([,,,,,].flat(), []);
 
-shouldBeArray([].flatten(0), []);
-shouldBeArray([0, 1, 2, 3, , 4].flatten(0), [0, 1, 2, 3, 4]);
-shouldBeArray([,,,,,].flatten(0), []);
+shouldBeArray([].flat(0), []);
+shouldBeArray([0, 1, 2, 3, , 4].flat(0), [0, 1, 2, 3, 4]);
+shouldBeArray([,,,,,].flat(0), []);
 
-shouldBeArray([].flatten(-1), []);
-shouldBeArray([0, 1, 2, 3, , 4].flatten(-1), [0, 1, 2, 3, 4]);
-shouldBeArray([,,,,,].flatten(-1), []);
+shouldBeArray([].flat(-1), []);
+shouldBeArray([0, 1, 2, 3, , 4].flat(-1), [0, 1, 2, 3, 4]);
+shouldBeArray([,,,,,].flat(-1), []);
 
-shouldBeArray([[],[]].flatten(), []);
-shouldBeArray([[0],[1]].flatten(), [0,1]);
-shouldBeArray([[0],[],1].flatten(), [0,1]);
-shouldBeArray([[0],[[]],1].flatten(), [0,[],1]);
-shouldBeArray([[0],[[]],1].flatten(1), [0,[],1]);
-shouldBeArray([[0],[[]],1].flatten(2), [0,1]);
+shouldBeArray([[],[]].flat(), []);
+shouldBeArray([[0],[1]].flat(), [0,1]);
+shouldBeArray([[0],[],1].flat(), [0,1]);
+shouldBeArray([[0],[[]],1].flat(), [0,[],1]);
+shouldBeArray([[0],[[]],1].flat(1), [0,[],1]);
+shouldBeArray([[0],[[]],1].flat(2), [0,1]);
 
-shouldBeArray([[],[]].flatten(0), [[],[]]);
-shouldBeArray([[0],[1]].flatten(0), [[0],[1]]);
-shouldBeArray([[0],[],1].flatten(0), [[0],[],1]);
-shouldBeArray([[0],[[]],1].flatten(0), [[0],[[]],1]);
+shouldBeArray([[],[]].flat(0), [[],[]]);
+shouldBeArray([[0],[1]].flat(0), [[0],[1]]);
+shouldBeArray([[0],[],1].flat(0), [[0],[],1]);
+shouldBeArray([[0],[[]],1].flat(0), [[0],[[]],1]);
 
-shouldBeArray([[[[[[[[[[[[[[[[[[[[[42]]]]]]]]]]]]]]]]]]]]].flatten(Infinity), [42]);
+shouldBeArray([[[[[[[[[[[[[[[[[[[[[42]]]]]]]]]]]]]]]]]]]]].flat(Infinity), [42]);
 
 var array = [];
-shouldBe(array.flatten() !== array, true);
+shouldBe(array.flat() !== array, true);
 
 class DerivedArray extends Array { }
-shouldBe((new DerivedArray).flatten() instanceof DerivedArray, true);
-var flatten = [].flatten;
+shouldBe((new DerivedArray).flat() instanceof DerivedArray, true);
+var flat = [].flat;
 var realm = createGlobalObject();
-shouldBe(flatten.call({}) instanceof Array, true);
-shouldBe(flatten.call(new realm.Array) instanceof Array, true);
+shouldBe(flat.call({}) instanceof Array, true);
+shouldBe(flat.call(new realm.Array) instanceof Array, true);
 var array2 = new realm.Array;
 array2.constructor = 0;
 
 shouldThrow(() => {
-    flatten.call(array2);
+    flat.call(array2);
 }, `TypeError: 0 is not a constructor`);
 
 var array2 = new realm.Array;
 array2.constructor = undefined;
-shouldBe(flatten.call(array2) instanceof Array, true);
+shouldBe(flat.call(array2) instanceof Array, true);
 
 var array2 = new realm.Array;
 array2.constructor = {
@@ -89,7 +89,7 @@ array2.constructor = {
         return null;
     }
 };
-shouldBe(flatten.call(array2) instanceof Array, true);
+shouldBe(flat.call(array2) instanceof Array, true);
 
 var array2 = new realm.Array;
 array2.constructor = {
@@ -97,7 +97,7 @@ array2.constructor = {
         return undefined;
     }
 };
-shouldBe(flatten.call(array2) instanceof Array, true);
+shouldBe(flat.call(array2) instanceof Array, true);
 
 var array2 = new realm.Array;
 array2.constructor = {
@@ -105,4 +105,4 @@ array2.constructor = {
         return DerivedArray;
     }
 };
-shouldBe(flatten.call(array2) instanceof DerivedArray, true);
+shouldBe(flat.call(array2) instanceof DerivedArray, true);
index 495ccc4..01ee22c 100644 (file)
@@ -633,36 +633,6 @@ test/built-ins/Array/prototype/concat/is-concat-spreadable-proxy.js:
 test/built-ins/Array/prototype/filter/target-array-with-non-writable-property.js:
   default: 'TypeError: Attempted to assign to readonly property.'
   strict mode: 'TypeError: Attempted to assign to readonly property.'
-test/built-ins/Array/prototype/flat/array-like-objects.js:
-  default: "TypeError: undefined is not an object (evaluating '[].flat.call')"
-  strict mode: "TypeError: undefined is not an object (evaluating '[].flat.call')"
-test/built-ins/Array/prototype/flat/bound-function-call.js:
-  default: "TypeError: undefined is not an object (evaluating '[].flat.bind')"
-  strict mode: "TypeError: undefined is not an object (evaluating '[].flat.bind')"
-test/built-ins/Array/prototype/flat/empty-array-elements.js:
-  default: "TypeError: [].flat is not a function. (In '[].flat()', '[].flat' is undefined)"
-  strict mode: "TypeError: [].flat is not a function. (In '[].flat()', '[].flat' is undefined)"
-test/built-ins/Array/prototype/flat/empty-object-elements.js:
-  default: "TypeError: [a].flat is not a function. (In '[a].flat()', '[a].flat' is undefined)"
-  strict mode: "TypeError: [a].flat is not a function. (In '[a].flat()', '[a].flat' is undefined)"
-test/built-ins/Array/prototype/flat/length.js:
-  default: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.length')"
-  strict mode: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.length')"
-test/built-ins/Array/prototype/flat/name.js:
-  default: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.name')"
-  strict mode: "TypeError: undefined is not an object (evaluating 'Array.prototype.flat.name')"
-test/built-ins/Array/prototype/flat/non-numeric-depth-should-not-throw.js:
-  default: "TypeError: a.flat is not a function. (In 'a.flat(depthNum)', 'a.flat' is undefined)"
-  strict mode: "TypeError: a.flat is not a function. (In 'a.flat(depthNum)', 'a.flat' is undefined)"
-test/built-ins/Array/prototype/flat/null-undefined-elements.js:
-  default: "TypeError: [1, null, void 0].flat is not a function. (In '[1, null, void 0].flat()', '[1, null, void 0].flat' is undefined)"
-  strict mode: "TypeError: [1, null, void 0].flat is not a function. (In '[1, null, void 0].flat()', '[1, null, void 0].flat' is undefined)"
-test/built-ins/Array/prototype/flat/positive-infinity.js:
-  default: "TypeError: a.flat is not a function. (In 'a.flat(Number.POSITIVE_INFINITY)', 'a.flat' is undefined)"
-  strict mode: "TypeError: a.flat is not a function. (In 'a.flat(Number.POSITIVE_INFINITY)', 'a.flat' is undefined)"
-test/built-ins/Array/prototype/flat/prop-desc.js:
-  default: 'Test262Error: `typeof Array.prototype.flat` is `function` Expected SameValue(«undefined», Â«function») to be true'
-  strict mode: 'Test262Error: `typeof Array.prototype.flat` is `function` Expected SameValue(«undefined», Â«function») to be true'
 test/built-ins/Array/prototype/indexOf/15.4.4.14-3-28.js:
   default: 'Test262Error: Array.prototype.indexOf.call(obj, targetObj) Expected SameValue(«-1», Â«0») to be true'
   strict mode: 'Test262Error: Array.prototype.indexOf.call(obj, targetObj) Expected SameValue(«-1», Â«0») to be true'
index 77571f4..a8b9d99 100644 (file)
@@ -1,3 +1,14 @@
+2018-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [JSC] Rename Array#flatten to flat
+        https://bugs.webkit.org/show_bug.cgi?id=186012
+
+        Reviewed by Saam Barati.
+
+        * inspector/model/remote-object-get-properties-expected.txt:
+        * js/Object-getOwnPropertyNames-expected.txt:
+        * js/script-tests/Object-getOwnPropertyNames.js:
+
 2018-05-25  Youenn Fablet  <youenn@apple.com>
 
         Migrate From-Origin to Cross-Origin-Resource-Policy
index 682352d..d7c9ab6 100644 (file)
@@ -74,8 +74,8 @@ ALL PROPERTIES:
     indexOf
     lastIndexOf
     filter
+    flat
     flatMap
-    flatten
     reduce
     reduceRight
     map
@@ -127,8 +127,8 @@ OWN PROPERTIES:
     indexOf
     lastIndexOf
     filter
+    flat
     flatMap
-    flatten
     reduce
     reduceRight
     map
@@ -165,8 +165,8 @@ DISPLAYABLE PROPERTIES:
     indexOf
     lastIndexOf
     filter
+    flat
     flatMap
-    flatten
     reduce
     reduceRight
     map
@@ -203,8 +203,8 @@ ALL PROPERTIES:
     indexOf
     lastIndexOf
     filter
+    flat
     flatMap
-    flatten
     reduce
     reduceRight
     map
index 71f8a66..3eb84a7 100644 (file)
@@ -47,7 +47,7 @@ PASS getSortedOwnPropertyNames(Object.prototype) is ['__defineGetter__', '__defi
 PASS getSortedOwnPropertyNames(Function) is ['length', 'name', 'prototype']
 PASS getSortedOwnPropertyNames(Function.prototype) is ['apply', 'arguments', 'bind', 'call', 'caller', 'constructor', 'length', 'name', 'toString']
 PASS getSortedOwnPropertyNames(Array) is ['from', 'isArray', 'length', 'name', 'of', 'prototype']
-PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flatMap', 'flatten', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']
+PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flat', 'flatMap', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']
 PASS getSortedOwnPropertyNames(String) is ['fromCharCode', 'fromCodePoint', 'length', 'name', 'prototype', 'raw']
 PASS getSortedOwnPropertyNames(String.prototype) is ['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'codePointAt', 'concat', 'constructor', 'endsWith', 'fixed', 'fontcolor', 'fontsize', 'includes', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'normalize', 'padEnd', 'padStart', 'repeat', 'replace', 'search', 'slice', 'small', 'split', 'startsWith', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimEnd', 'trimLeft', 'trimRight', 'trimStart', 'valueOf']
 PASS getSortedOwnPropertyNames(Boolean) is ['length', 'name', 'prototype']
index bbae583..c730ed5 100644 (file)
@@ -56,7 +56,7 @@ var expectedPropertyNamesSet = {
     "Function": "['length', 'name', 'prototype']",
     "Function.prototype": "['apply', 'arguments', 'bind', 'call', 'caller', 'constructor', 'length', 'name', 'toString']",
     "Array": "['from', 'isArray', 'length', 'name', 'of', 'prototype']",
-    "Array.prototype": "['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flatMap', 'flatten', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']",
+    "Array.prototype": "['concat', 'constructor', 'copyWithin', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flat', 'flatMap', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift', 'values']",
     "String": "['fromCharCode', 'fromCodePoint', 'length', 'name', 'prototype', 'raw']",
     "String.prototype": "['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'codePointAt', 'concat', 'constructor', 'endsWith', 'fixed', 'fontcolor', 'fontsize', 'includes', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'normalize', 'padEnd', 'padStart', 'repeat', 'replace', 'search', 'slice', 'small', 'split', 'startsWith', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimEnd', 'trimLeft', 'trimRight', 'trimStart', 'valueOf']",
     "Boolean": "['length', 'name', 'prototype']",
index a3e2a22..af3750d 100644 (file)
@@ -1,3 +1,24 @@
+2018-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [JSC] Rename Array#flatten to flat
+        https://bugs.webkit.org/show_bug.cgi?id=186012
+
+        Reviewed by Saam Barati.
+
+        Rename Array#flatten to Array#flat. This rename is done in TC39 since flatten
+        conflicts with the mootools' function name.
+
+        * builtins/ArrayPrototype.js:
+        (globalPrivate.flatIntoArray):
+        (flat):
+        (globalPrivate.flatIntoArrayWithCallback):
+        (flatMap):
+        (globalPrivate.flattenIntoArray): Deleted.
+        (flatten): Deleted.
+        (globalPrivate.flattenIntoArrayWithCallback): Deleted.
+        * runtime/ArrayPrototype.cpp:
+        (JSC::ArrayPrototype::finishCreation):
+
 2018-05-25  Mark Lam  <mark.lam@apple.com>
 
         for-in loops should preserve and restore the TDZ stack for each of its internal loops.
index a3c17ce..870e557 100644 (file)
@@ -767,7 +767,7 @@ function arraySpeciesCreate(array, length)
 }
 
 @globalPrivate
-function flattenIntoArray(target, source, sourceLength, targetIndex, depth)
+function flatIntoArray(target, source, sourceLength, targetIndex, depth)
 {
     "use strict";
 
@@ -775,7 +775,7 @@ function flattenIntoArray(target, source, sourceLength, targetIndex, depth)
         if (sourceIndex in source) {
             var element = source[sourceIndex];
             if (depth > 0 && @isArray(element))
-                targetIndex = @flattenIntoArray(target, element, @toLength(element.length), targetIndex, depth - 1);
+                targetIndex = @flatIntoArray(target, element, @toLength(element.length), targetIndex, depth - 1);
             else {
                 if (targetIndex >= @MAX_SAFE_INTEGER)
                     @throwTypeError("flatten array exceeds 2**53 - 1");
@@ -787,11 +787,11 @@ function flattenIntoArray(target, source, sourceLength, targetIndex, depth)
     return targetIndex;
 }
 
-function flatten()
+function flat()
 {
     "use strict";
 
-    var array = @toObject(this, "Array.prototype.flatten requires that |this| not be null or undefined");
+    var array = @toObject(this, "Array.prototype.flat requires that |this| not be null or undefined");
     var length = @toLength(array.length);
 
     var depthNum = 1;
@@ -801,12 +801,12 @@ function flatten()
 
     var result = @arraySpeciesCreate(array, 0);
 
-    @flattenIntoArray(result, array, length, 0, depthNum);
+    @flatIntoArray(result, array, length, 0, depthNum);
     return result;
 }
 
 @globalPrivate
-function flattenIntoArrayWithCallback(target, source, sourceLength, targetIndex, callback, thisArg)
+function flatIntoArrayWithCallback(target, source, sourceLength, targetIndex, callback, thisArg)
 {
     "use strict";
 
@@ -814,7 +814,7 @@ function flattenIntoArrayWithCallback(target, source, sourceLength, targetIndex,
         if (sourceIndex in source) {
             var element = callback.@call(thisArg, source[sourceIndex], sourceIndex, source);
             if (@isArray(element))
-                targetIndex = @flattenIntoArray(target, element, @toLength(element.length), targetIndex, 0);
+                targetIndex = @flatIntoArray(target, element, @toLength(element.length), targetIndex, 0);
             else {
                 if (targetIndex >= @MAX_SAFE_INTEGER)
                     @throwTypeError("flatten array exceeds 2**53 - 1");
@@ -840,5 +840,5 @@ function flatMap(callback)
 
     var result = @arraySpeciesCreate(array, 0);
 
-    return @flattenIntoArrayWithCallback(result, array, length, 0, callback, thisArg);
+    return @flatIntoArrayWithCallback(result, array, length, 0, callback, thisArg);
 }
index 51b0d5b..dc1a9da 100644 (file)
@@ -107,8 +107,8 @@ void ArrayPrototype::finishCreation(VM& vm, JSGlobalObject* globalObject)
     JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION("indexOf", arrayProtoFuncIndexOf, static_cast<unsigned>(PropertyAttribute::DontEnum), 1, ArrayIndexOfIntrinsic);
     JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION("lastIndexOf", arrayProtoFuncLastIndexOf, static_cast<unsigned>(PropertyAttribute::DontEnum), 1);
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("filter", arrayPrototypeFilterCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
+    JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flat", arrayPrototypeFlatCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flatMap", arrayPrototypeFlatMapCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
-    JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("flatten", arrayPrototypeFlattenCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("reduce", arrayPrototypeReduceCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("reduceRight", arrayPrototypeReduceRightCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));
     JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION("map", arrayPrototypeMapCodeGenerator, static_cast<unsigned>(PropertyAttribute::DontEnum));