]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/RegExp.h
JavaScriptCore-7600.1.4.9.tar.gz
[apple/javascriptcore.git] / runtime / RegExp.h
index ad1020376cb12b7eea0e9d62da32a669d25baa8b..fec8f6a6fa2ac754c4ab88769228e8b019c698af 100644 (file)
 #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()
@@ -73,23 +75,25 @@ namespace JSC {
         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,
@@ -98,21 +102,25 @@ namespace JSC {
             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