#include "MatchResult.h"
#include "RegExpKey.h"
#include "Structure.h"
-#include "UString.h"
#include "yarr/Yarr.h"
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
+#include <wtf/text/WTFString.h>
#if ENABLE(YARR_JIT)
#include "yarr/YarrJIT.h"
namespace JSC {
struct RegExpRepresentation;
- class JSGlobalData;
+ class VM;
- JS_EXPORT_PRIVATE RegExpFlags regExpFlags(const UString&);
+ JS_EXPORT_PRIVATE RegExpFlags regExpFlags(const String&);
class RegExp : public JSCell {
public:
typedef JSCell Base;
- JS_EXPORT_PRIVATE static RegExp* create(JSGlobalData&, const UString& pattern, RegExpFlags);
+ JS_EXPORT_PRIVATE static RegExp* create(VM&, const String& pattern, RegExpFlags);
+ static const bool needsDestruction = true;
+ static const bool hasImmortalStructure = 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 UString& pattern() const { return m_patternString; }
+ 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(JSGlobalData&, const UString&, unsigned startOffset, Vector<int, 32>& ovector);
- MatchResult match(JSGlobalData&, const UString&, unsigned startOffset);
+ JS_EXPORT_PRIVATE int match(VM&, const String&, unsigned startOffset, Vector<int, 32>& ovector);
+ MatchResult match(VM&, const String&, unsigned startOffset);
unsigned numSubpatterns() const { return m_numSubpatterns; }
bool hasCode()
void printTraceData();
#endif
- static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype)
+ static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
{
- return Structure::create(globalData, globalObject, prototype, TypeInfo(LeafType, 0), &s_info);
+ return Structure::create(vm, globalObject, prototype, TypeInfo(LeafType, StructureFlags), info());
}
- static const ClassInfo s_info;
+ DECLARE_INFO;
RegExpKey key() { return RegExpKey(m_flags, m_patternString); }
protected:
- void finishCreation(JSGlobalData&);
+ static const unsigned StructureFlags = StructureIsImmortal;
+
+ void finishCreation(VM&);
private:
friend class RegExpCache;
- RegExp(JSGlobalData&, const UString&, RegExpFlags);
+ RegExp(VM&, const String&, RegExpFlags);
- static RegExp* createWithoutCaching(JSGlobalData&, const UString&, RegExpFlags);
+ static RegExp* createWithoutCaching(VM&, const String&, RegExpFlags);
enum RegExpState {
ParseError,
NotCompiled
} m_state;
- void compile(JSGlobalData*, Yarr::YarrCharSize);
- void compileIfNecessary(JSGlobalData&, Yarr::YarrCharSize);
+ void compile(VM*, Yarr::YarrCharSize);
+ void compileIfNecessary(VM&, Yarr::YarrCharSize);
- void compileMatchOnly(JSGlobalData*, Yarr::YarrCharSize);
- void compileIfNecessaryMatchOnly(JSGlobalData&, Yarr::YarrCharSize);
+ void compileMatchOnly(VM*, Yarr::YarrCharSize);
+ void compileIfNecessaryMatchOnly(VM&, Yarr::YarrCharSize);
#if ENABLE(YARR_JIT_DEBUG)
- void matchCompareWithInterpreter(const UString&, int startOffset, int* offsetVector, int jitResult);
+ void matchCompareWithInterpreter(const String&, int startOffset, int* offsetVector, int jitResult);
#endif
- UString m_patternString;
+ String m_patternString;
RegExpFlags m_flags;
const char* m_constructionError;
unsigned m_numSubpatterns;
#if ENABLE(REGEXP_TRACING)
+ double m_rtMatchOnlyTotalSubjectStringLen;
+ double m_rtMatchTotalSubjectStringLen;
+ unsigned m_rtMatchOnlyCallCount;
+ unsigned m_rtMatchOnlyFoundCount;
unsigned m_rtMatchCallCount;
unsigned m_rtMatchFoundCount;
#endif