From: Lady Date: Sat, 20 May 2023 01:05:32 +0000 (-0700) Subject: Add ::flags override to Matcher X-Git-Tag: 0.3.0^0 X-Git-Url: https://git.ladys.computer/Pisces/commitdiff_plain/f0c3b510a532ded70c1a72ad753204b21d0f53bb?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);