]> Lady’s Gitweb - Pisces/blobdiff - iterable.js
Define names and lengths for iterator functions
[Pisces] / iterable.js
index 7149a28fb4b836ee47f1c3a5aa7ad76a688fbb5b..6b45000090543a4422293cf9cc2f17d03f0a2b70 100644 (file)
@@ -1,11 +1,14 @@
-// ♓🌟 Piscēs ∷ iterable.js
-// ====================================================================
-//
-// Copyright © 2023 Lady [@ Lady’s Computer].
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this
-// file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
+// SPDX-FileCopyrightText: 2023, 2025 Lady <https://www.ladys.computer/about/#lady>
+// SPDX-License-Identifier: MPL-2.0
+/**
+ * ⁌ ♓🧩 Piscēs ∷ iterable.js
+ *
+ * Copyright © 2023, 2025 Lady [@ Ladys Computer].
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
+ */
 
 import { bind, call, identity } from "./function.js";
 import {
@@ -30,7 +33,7 @@ export const {
    * the resulting iterator.
    *
    * The resulting function also takes a second argument, which will be
-   * used as the `this` value when calling the provided generator
+   * used as the this value when calling the provided generator
    * function, if provided.
    *
    * ※ The returned function is an ordinary nonconstructible (arrow)
@@ -53,7 +56,7 @@ export const {
    * the resulting iterator.
    *
    * The resulting function also takes a second argument, which will be
-   * used as the `this` value when calling the provided generator
+   * used as the this value when calling the provided generator
    * function, if provided.
    *
    * ※ The returned function is an ordinary nonconstructible (arrow)
@@ -82,7 +85,7 @@ export const {
    * the resulting iterator.
    *
    * The resulting function also takes a second argument, which will be
-   * used as the `this` value when calling the provided generator
+   * used as the this value when calling the provided generator
    * function, if provided.
    *
    * ※ The returned function is an ordinary nonconstructible (arrow)
@@ -105,7 +108,7 @@ export const {
    * the resulting iterator.
    *
    * The resulting function also takes a second argument, which will be
-   * used as the `this` value when calling the provided generator
+   * used as the this value when calling the provided generator
    * function, if provided.
    *
    * ※ The returned function is an ordinary nonconstructible (arrow)
@@ -128,11 +131,11 @@ export const {
    * the resulting iterator.
    *
    * The resulting function also takes a second argument, which will be
-   * used as the `this` value when calling the provided generator
+   * used as the this value when calling the provided generator
    * function, if provided.
    *
    * ※ This iterator function iterates over characters; use
-   * `arrayIteratorFunction` to iterate over code units.
+   * arrayIteratorFunction to iterate over code units.
    *
    * ※ The returned function is an ordinary nonconstructible (arrow)
    * function which, when called with a string, returns an iterator.
@@ -174,7 +177,7 @@ export const {
    * An iterator generated by an iterator function.
    *
    * This class provides the internal data structure of all the
-   * iterator functions as well as the `::next` behaviour they all use.
+   * iterator functions as well as the `::next´ behaviour they all use.
    *
    * ※ This class extends the identity function to allow for arbitrary
    * construction of its superclass instance based on the provided
@@ -197,7 +200,7 @@ export const {
      *
      * ☡ It is not possible to type·check the provided next method or
      * generator function to ensure that they actually are correct and
-     * appropriately callable; if they arent, an error will be thrown
+     * appropriately callable; if they aren¦t, an error will be thrown
      * when attempting to yield the first value.
      */
     constructor(
@@ -220,8 +223,8 @@ export const {
       const baseIteratorNext = this.#baseIteratorNext;
       const generateNext = this.#generateNext;
       while (true) {
-        // This function sometimes needs to repeat its processing steps
-        // in the case that a generator function was provided.
+        // This function some·times needs to repeat its processing
+        // steps in the case that a generator function was provided.
         //
         // To avoid potentially large amounts of recursive calls, it is
         // defined in a loop which will exit the first time a suitable
@@ -233,7 +236,7 @@ export const {
           return { value: UNDEFINED, done: true };
         } else if (nextIterator === null) {
           // This iterator is not currently yielding values from the
-          // provided generator function, either because it doesnt
+          // provided generator function, either because it doesn¦t
           // exist or because its values have been exhausted.
           //
           // Get the next value in the base iterator and either provide
@@ -283,7 +286,9 @@ export const {
             continue;
           } else {
             // The current iterator of values has yielded another
-            // value; reyield it.
+            // value.
+            //
+            // Reyield it.
             return { value, done: false };
           }
         }
@@ -328,17 +333,28 @@ export const {
   const iteratorFunction = (
     makeBaseIterator,
     baseIteratorNext,
+    iteratorFunctionName,
     generateNext,
     stringTag = "Iterator",
   ) => {
     const prototype = makePrototype(stringTag); // intentionally cached
-    return ($, thisArg = UNDEFINED) =>
-      new Iterator(
-        prototype,
-        call(makeBaseIterator, $, []),
-        baseIteratorNext,
-        generateNext == null ? null : bind(generateNext, thisArg, []),
-      );
+    return defineOwnProperty(
+      ($, thisArg = UNDEFINED) =>
+        new Iterator(
+          prototype,
+          call(makeBaseIterator, $, []),
+          baseIteratorNext,
+          generateNext == null
+            ? null
+            : bind(generateNext, thisArg, []),
+        ),
+      "name",
+      defineOwnDataProperty(
+        objectCreate(null),
+        "value",
+        iteratorFunctionName,
+      ),
+    );
   };
 
   return {
@@ -346,7 +362,7 @@ export const {
       bind(
         iteratorFunction,
         UNDEFINED,
-        [arrayIterator, arrayIteratorNext],
+        [arrayIterator, arrayIteratorNext, "values"],
       ),
       "name",
       defineOwnDataProperty(
@@ -364,6 +380,7 @@ export const {
             return this();
           },
           generatorIteratorNext,
+          "yields",
         ],
       ),
       "name",
@@ -377,7 +394,7 @@ export const {
       bind(
         iteratorFunction,
         UNDEFINED,
-        [mapIterator, mapIteratorNext],
+        [mapIterator, mapIteratorNext, "entries"],
       ),
       "name",
       defineOwnDataProperty(
@@ -390,7 +407,7 @@ export const {
       bind(
         iteratorFunction,
         UNDEFINED,
-        [setIterator, setIteratorNext],
+        [setIterator, setIteratorNext, "values"],
       ),
       "name",
       defineOwnDataProperty(
@@ -403,7 +420,7 @@ export const {
       bind(
         iteratorFunction,
         UNDEFINED,
-        [stringIterator, stringIteratorNext],
+        [stringIterator, stringIteratorNext, "characters"],
       ),
       "name",
       defineOwnDataProperty(
This page took 0.275604 seconds and 4 git commands to generate.