RegExpObject.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2020, Matthew Olsson <mattco@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Optional.h>
  8. #include <AK/Result.h>
  9. #include <LibJS/AST.h>
  10. #include <LibJS/Runtime/Object.h>
  11. #include <LibRegex/Regex.h>
  12. namespace JS {
  13. ThrowCompletionOr<RegExpObject*> regexp_create(GlobalObject&, Value pattern, Value flags);
  14. Result<regex::RegexOptions<ECMAScriptFlags>, String> regex_flags_from_string(StringView flags);
  15. String parse_regex_pattern(StringView pattern, bool unicode);
  16. class RegExpObject : public Object {
  17. JS_OBJECT(RegExpObject, Object);
  18. public:
  19. // JS regexps are all 'global' by default as per our definition, but the "global" flag enables "stateful".
  20. // FIXME: Enable 'BrowserExtended' only if in a browser context.
  21. static constexpr regex::RegexOptions<ECMAScriptFlags> default_flags { (regex::ECMAScriptFlags)regex::AllFlags::Global | (regex::ECMAScriptFlags)regex::AllFlags::SkipTrimEmptyMatches | regex::ECMAScriptFlags::BrowserExtended };
  22. static RegExpObject* create(GlobalObject&);
  23. static RegExpObject* create(GlobalObject&, Regex<ECMA262> regex, String pattern, String flags);
  24. RegExpObject(Object& prototype);
  25. RegExpObject(Regex<ECMA262> regex, String pattern, String flags, Object& prototype);
  26. ThrowCompletionOr<RegExpObject*> regexp_initialize(GlobalObject&, Value pattern, Value flags);
  27. String escape_regexp_pattern() const;
  28. virtual void initialize(GlobalObject&) override;
  29. virtual ~RegExpObject() override;
  30. const String& pattern() const { return m_pattern; }
  31. const String& flags() const { return m_flags; }
  32. const Regex<ECMA262>& regex() { return *m_regex; }
  33. const Regex<ECMA262>& regex() const { return *m_regex; }
  34. private:
  35. String m_pattern;
  36. String m_flags;
  37. Optional<Regex<ECMA262>> m_regex;
  38. };
  39. }