]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/RegExpMatchesArray.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / runtime / RegExpMatchesArray.h
index 8997d8e47fcc8c4fad02b45c4c5d6b12ef02ba45..669dd39ed52ab3de8e824b4cff4a48701bf94b10 100644 (file)
 
 namespace JSC {
 
-    class RegExpMatchesArray : public JSArray {
-    private:
-        RegExpMatchesArray(VM&, Butterfly*, JSGlobalObject*, JSString*, RegExp*, MatchResult);
-
-        enum ReifiedState { ReifiedNone, ReifiedMatch, ReifiedAll };
-
-    public:
-        typedef JSArray Base;
-
-        static RegExpMatchesArray* create(ExecState*, JSString*, RegExp*, MatchResult);
-
-        JSString* leftContext(ExecState*);
-        JSString* rightContext(ExecState*);
-
-        DECLARE_INFO;
-
-        static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
-        {
-            return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info(), ArrayWithSlowPutArrayStorage);
-        }
-
-        static void visitChildren(JSCell*, SlotVisitor&);
-
-    protected:
-        void finishCreation(VM&);
-
-        static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesVisitChildren | OverridesGetPropertyNames | Base::StructureFlags;
-
-    private:
-        ALWAYS_INLINE void reifyAllPropertiesIfNecessary(ExecState* exec)
-        {
-            if (m_state != ReifiedAll)
-                reifyAllProperties(exec);
-        }
-
-        ALWAYS_INLINE void reifyMatchPropertyIfNecessary(ExecState* exec)
-        {
-            if (m_state == ReifiedNone)
-                reifyMatchProperty(exec);
-        }
-
-        static bool getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(object);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            return JSArray::getOwnPropertySlot(thisObject, exec, propertyName, slot);
-        }
-
-        static bool getOwnPropertySlotByIndex(JSObject* object, ExecState* exec, unsigned propertyName, PropertySlot& slot)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(object);
-            if (propertyName)
-                thisObject->reifyAllPropertiesIfNecessary(exec);
-            else
-                thisObject->reifyMatchPropertyIfNecessary(exec);
-            return JSArray::getOwnPropertySlotByIndex(thisObject, exec, propertyName, slot);
-        }
-
-        static void put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue v, PutPropertySlot& slot)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(cell);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            JSArray::put(thisObject, exec, propertyName, v, slot);
-        }
-        
-        static void putByIndex(JSCell* cell, ExecState* exec, unsigned propertyName, JSValue v, bool shouldThrow)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(cell);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            JSArray::putByIndex(thisObject, exec, propertyName, v, shouldThrow);
-        }
-
-        static bool deleteProperty(JSCell* cell, ExecState* exec, PropertyName propertyName)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(cell);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            return JSArray::deleteProperty(thisObject, exec, propertyName);
-        }
-
-        static bool deletePropertyByIndex(JSCell* cell, ExecState* exec, unsigned propertyName)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(cell);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            return JSArray::deletePropertyByIndex(thisObject, exec, propertyName);
-        }
-
-        static void getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& arr, EnumerationMode mode = ExcludeDontEnumProperties)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(object);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            JSArray::getOwnPropertyNames(thisObject, exec, arr, mode);
-        }
-
-        static bool defineOwnProperty(JSObject* object, ExecState* exec, PropertyName propertyName, const PropertyDescriptor& descriptor, bool shouldThrow)
-        {
-            RegExpMatchesArray* thisObject = jsCast<RegExpMatchesArray*>(object);
-            thisObject->reifyAllPropertiesIfNecessary(exec);
-            return JSArray::defineOwnProperty(object, exec, propertyName, descriptor, shouldThrow);
-        }
-
-        void reifyAllProperties(ExecState*);
-        void reifyMatchProperty(ExecState*);
-
-        WriteBarrier<JSString> m_input;
-        WriteBarrier<RegExp> m_regExp;
-        MatchResult m_result;
-        ReifiedState m_state;
-};
-
-inline bool isRegExpMatchesArray(JSValue value)
-{
-    return value.isCell() && value.asCell()->classInfo() == RegExpMatchesArray::info();
-}
+JSArray* createRegExpMatchesArray(ExecState*, JSString*, RegExp*, MatchResult);
+Structure* createRegExpMatchesArrayStructure(VM&, JSGlobalObject&);
 
 }