]> Lady’s Gitweb - Pisces/blobdiff - object.js
Move isConcatSpreadable[Object] into object.js
[Pisces] / object.js
index 3052f15030bd5a2606684f8a9342a4622a89952a..ee3d51da336d6f1c5a09123cd41b8ec921550f80 100644 (file)
--- a/object.js
+++ b/object.js
@@ -14,6 +14,7 @@ import {
   toFunctionName,
 } from "./function.js";
 import {
   toFunctionName,
 } from "./function.js";
 import {
+  IS_CONCAT_SPREADABLE,
   ITERATOR,
   SPECIES,
   toLength,
   ITERATOR,
   SPECIES,
   toLength,
@@ -501,24 +502,9 @@ export const {
     isSealed,
     setPrototypeOf,
   } = Object;
     isSealed,
     setPrototypeOf,
   } = Object;
-  const { [ITERATOR]: arrayIterator } = Array.prototype;
-  const { next: arrayIteratorNext } = getPrototypeOf([][ITERATOR]());
   const {
     next: generatorIteratorNext,
   } = getPrototypeOf(function* () {}.prototype);
   const {
     next: generatorIteratorNext,
   } = getPrototypeOf(function* () {}.prototype);
-  const splatIterablePrototype = {
-    [ITERATOR]() {
-      return {
-        next: bind(
-          arrayIteratorNext,
-          call(arrayIterator, this.args, []),
-          [],
-        ),
-      };
-    },
-  };
-  const splatIterable = ($) =>
-    create(splatIterablePrototype, { args: { value: $ } });
   const propertyDescriptorEntryIterablePrototype = {
     [ITERATOR]() {
       return {
   const propertyDescriptorEntryIterablePrototype = {
     [ITERATOR]() {
       return {
@@ -533,8 +519,9 @@ export const {
 
   return {
     defineOwnProperties: (O, ...sources) => {
 
   return {
     defineOwnProperties: (O, ...sources) => {
-      for (const source of splatIterable(sources)) {
-        defineProperties(O, source);
+      const { length } = sources;
+      for (let index = 0; index < length; ++index) {
+        defineProperties(O, sources[index]);
       }
       return O;
     },
       }
       return O;
     },
@@ -824,6 +811,32 @@ export const isArraylikeObject = ($) => {
   }
 };
 
   }
 };
 
+export const {
+  /**
+   * Returns whether the provided value is spreadable during array
+   * concatenation.
+   *
+   * This is also used to determine which things should be treated as
+   * collections.
+   */
+  isConcatSpreadableObject,
+} = (() => {
+  const { isArray } = Array;
+
+  return {
+    isConcatSpreadableObject: ($) => {
+      if (type($) !== "object") {
+        // The provided value is not an object.
+        return false;
+      } else {
+        // The provided value is an object.
+        const spreadable = $[IS_CONCAT_SPREADABLE];
+        return spreadable !== undefined ? !!spreadable : isArray($);
+      }
+    },
+  };
+})();
+
 /**
  * Returns whether the provided object is extensible.
  *
 /**
  * Returns whether the provided object is extensible.
  *
This page took 0.023438 seconds and 4 git commands to generate.