From: Lady <redacted>
Date: Sat, 20 May 2023 01:05:32 +0000 (-0700)
Subject: Add ::flags override to Matcher
X-Git-Tag: 0.3.0
X-Git-Url: https://git.ladys.computer/Pisces/commitdiff_plain/e6c725deb48ac726faab137077c7ec9ad4310c7c?ds=inline

Add ::flags override to Matcher

Otherwise this code will break if new flags are added but not supported
by ♓🌟 Piscēs.
---

diff --git a/string.js b/string.js
index 3dc39ac..eb6f6fb 100644
--- a/string.js
+++ b/string.js
@@ -1,7 +1,7 @@
 // ♓🌟 Piscēs ∷ string.js
 // ====================================================================
 //
-// Copyright © 2022 Lady [@ Lady’s Computer].
+// Copyright © 2022–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
@@ -15,6 +15,7 @@ import {
   objectCreate,
   setPrototype,
 } from "./object.js";
+import { type } from "./value.js";
 
 export const {
   /**
@@ -34,6 +35,8 @@ export const {
   const { exec: reExec, toString: reToString } = rePrototype;
   const getDotAll =
     Object.getOwnPropertyDescriptor(rePrototype, "dotAll").get;
+  const getFlags =
+    Object.getOwnPropertyDescriptor(rePrototype, "flags").get;
   const getGlobal =
     Object.getOwnPropertyDescriptor(rePrototype, "global").get;
   const getHasIndices =
@@ -175,6 +178,16 @@ export const {
       }
     }
 
+    /**
+     * Gets the flags present on this Matcher.
+     *
+     * ※ This needs to be defined because the internal RegExp object
+     * may have flags which are not yet recognized by ♓🌟 Piscēs.
+     */
+    get flags() {
+      return call(getFlags, this.#regExp, []);
+    }
+
     /** Gets whether the global flag is present on this Matcher. */
     get global() {
       return call(getGlobal, this.#regExp, []);
diff --git a/string.test.js b/string.test.js
index 94aec37..95c715e 100644
--- a/string.test.js
+++ b/string.test.js
@@ -184,6 +184,12 @@ describe("Matcher", () => {
     });
   });
 
+  describe("::toString", () => {
+    it("[[Get]] does not throw an error", () => {
+      new Matcher(/(?:)/u).toString();
+    });
+  });
+
   describe("::unicode", () => {
     it("[[Get]] returns true when the unicode flag is present", () => {
       assertStrictEquals(new Matcher(/(?:)/u).unicode, true);