1/*
2 *  Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 *
4 *  This library is free software; you can redistribute it and/or
5 *  modify it under the terms of the GNU Lesser General Public
6 *  License as published by the Free Software Foundation; either
7 *  version 2 of the License, or (at your option) any later version.
8 *
9 *  This library is distributed in the hope that it will be useful,
10 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 *  Lesser General Public License for more details.
13 *
14 *  You should have received a copy of the GNU Lesser General Public
15 *  License along with this library; if not, write to the Free Software
16 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17 *
18 */
19
20#ifndef RegExpMatchesArray_h
21#define RegExpMatchesArray_h
22
23#include "JSArray.h"
24
25namespace JSC {
26
27    class RegExpMatchesArray : public JSArray {
28    public:
29        RegExpMatchesArray(ExecState*, RegExpConstructorPrivate*);
30        virtual ~RegExpMatchesArray();
31
32    private:
33        virtual bool getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
34        {
35            if (subclassData())
36                fillArrayInstance(exec);
37            return JSArray::getOwnPropertySlot(exec, propertyName, slot);
38        }
39
40        virtual bool getOwnPropertySlot(ExecState* exec, unsigned propertyName, PropertySlot& slot)
41        {
42            if (subclassData())
43                fillArrayInstance(exec);
44            return JSArray::getOwnPropertySlot(exec, propertyName, slot);
45        }
46
47        virtual bool getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
48        {
49            if (subclassData())
50                fillArrayInstance(exec);
51            return JSArray::getOwnPropertyDescriptor(exec, propertyName, descriptor);
52        }
53
54        virtual void put(ExecState* exec, const Identifier& propertyName, JSValue v, PutPropertySlot& slot)
55        {
56            if (subclassData())
57                fillArrayInstance(exec);
58            JSArray::put(exec, propertyName, v, slot);
59        }
60
61        virtual void put(ExecState* exec, unsigned propertyName, JSValue v)
62        {
63            if (subclassData())
64                fillArrayInstance(exec);
65            JSArray::put(exec, propertyName, v);
66        }
67
68        virtual bool deleteProperty(ExecState* exec, const Identifier& propertyName)
69        {
70            if (subclassData())
71                fillArrayInstance(exec);
72            return JSArray::deleteProperty(exec, propertyName);
73        }
74
75        virtual bool deleteProperty(ExecState* exec, unsigned propertyName)
76        {
77            if (subclassData())
78                fillArrayInstance(exec);
79            return JSArray::deleteProperty(exec, propertyName);
80        }
81
82        virtual void getOwnPropertyNames(ExecState* exec, PropertyNameArray& arr, EnumerationMode mode = ExcludeDontEnumProperties)
83        {
84            if (subclassData())
85                fillArrayInstance(exec);
86            JSArray::getOwnPropertyNames(exec, arr, mode);
87        }
88
89        void fillArrayInstance(ExecState*);
90};
91
92}
93
94#endif // RegExpMatchesArray_h
95