+struct RegExpRepresentation;
+class VM;
+
+JS_EXPORT_PRIVATE RegExpFlags regExpFlags(const String&);
+
+class RegExp final : public JSCell {
+public:
+ typedef JSCell Base;
+ static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
+
+ JS_EXPORT_PRIVATE static RegExp* create(VM&, const String& pattern, RegExpFlags);
+ static const bool needsDestruction = true;
+ static void destroy(JSCell*);
+
+ bool global() const { return m_flags & FlagGlobal; }
+ bool ignoreCase() const { return m_flags & FlagIgnoreCase; }
+ bool multiline() const { return m_flags & FlagMultiline; }
+
+ const String& pattern() const { return m_patternString; }
+
+ bool isValid() const { return !m_constructionError && m_flags != InvalidFlags; }
+ const char* errorMessage() const { return m_constructionError; }
+
+ JS_EXPORT_PRIVATE int match(VM&, const String&, unsigned startOffset, Vector<int, 32>& ovector);
+ JS_EXPORT_PRIVATE MatchResult match(VM&, const String&, unsigned startOffset);
+ unsigned numSubpatterns() const { return m_numSubpatterns; }
+
+ bool hasCode()
+ {
+ return m_state != NotCompiled;
+ }