18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2008 Apple Inc. All Rights Reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RegExpMatchesArray_h
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RegExpMatchesArray_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSArray.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class RegExpMatchesArray : public JSArray {
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RegExpMatchesArray(ExecState*, RegExpConstructorPrivate*);
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual ~RegExpMatchesArray();
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return JSArray::getOwnPropertySlot(exec, propertyName, slot);
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool getOwnPropertySlot(ExecState* exec, unsigned propertyName, PropertySlot& slot)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return JSArray::getOwnPropertySlot(exec, propertyName, slot);
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual bool getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        {
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                fillArrayInstance(exec);
51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return JSArray::getOwnPropertyDescriptor(exec, propertyName, descriptor);
52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        }
53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        virtual void put(ExecState* exec, const Identifier& propertyName, JSValue v, PutPropertySlot& slot)
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            JSArray::put(exec, propertyName, v, slot);
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        virtual void put(ExecState* exec, unsigned propertyName, JSValue v)
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            JSArray::put(exec, propertyName, v);
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool deleteProperty(ExecState* exec, const Identifier& propertyName)
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return JSArray::deleteProperty(exec, propertyName);
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual bool deleteProperty(ExecState* exec, unsigned propertyName)
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return JSArray::deleteProperty(exec, propertyName);
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
82d0825bca7fe65beaee391d30da42e937db621564Steve Block        virtual void getOwnPropertyNames(ExecState* exec, PropertyNameArray& arr, EnumerationMode mode = ExcludeDontEnumProperties)
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            if (subclassData())
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                fillArrayInstance(exec);
86d0825bca7fe65beaee391d30da42e937db621564Steve Block            JSArray::getOwnPropertyNames(exec, arr, mode);
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void fillArrayInstance(ExecState*);
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RegExpMatchesArray_h
95