/* * Copyright (c) 2020, Matthew Olsson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include struct Flags { regex::RegexOptions effective_flags; regex::RegexOptions declared_flags; }; namespace JS { RegExpObject* regexp_create(GlobalObject&, Value pattern, Value flags); class RegExpObject : public Object { JS_OBJECT(RegExpObject, Object); public: static RegExpObject* create(GlobalObject&, String pattern, String flags); RegExpObject(String pattern, String flags, Object& prototype); virtual void initialize(GlobalObject&) override; virtual ~RegExpObject() override; const String& pattern() const { return m_pattern; } const String& flags() const { return m_flags; } const regex::RegexOptions& declared_options() { return m_active_flags.declared_flags; } const Regex& regex() { return m_regex; } const Regex& regex() const { return m_regex; } private: JS_DECLARE_NATIVE_GETTER(last_index); JS_DECLARE_NATIVE_SETTER(set_last_index); String m_pattern; String m_flags; Flags m_active_flags; Regex m_regex; }; }