081e9b35e675a586d2b1bcea4377483fddd080f6
[WebKit-https.git] / Source / JavaScriptCore / runtime / ArrayPrototype.h
1 /*
2  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
3  *  Copyright (C) 2007, 2011, 2015 Apple Inc. All rights reserved.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  *
19  */
20
21 #pragma once
22
23 #include "JSArray.h"
24 #include "Lookup.h"
25
26 namespace JSC {
27
28 class ArrayPrototypeAdaptiveInferredPropertyWatchpoint;
29
30 class ArrayPrototype : public JSArray {
31 private:
32     ArrayPrototype(VM&, Structure*);
33
34 public:
35     typedef JSArray Base;
36
37     enum class SpeciesWatchpointStatus {
38         Uninitialized,
39         Initialized,
40         Fired
41     };
42
43     static ArrayPrototype* create(VM&, JSGlobalObject*, Structure*);
44         
45     DECLARE_EXPORT_INFO;
46
47     static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
48     {
49         return Structure::create(vm, globalObject, prototype, TypeInfo(DerivedArrayType, StructureFlags), info(), ArrayClass);
50     }
51
52     void tryInitializeSpeciesWatchpoint(ExecState*);
53
54     static const bool needsDestruction = false;
55     // We don't need destruction since we use a finalizer.
56     static void destroy(JSC::JSCell*);
57
58 protected:
59     void finishCreation(VM&, JSGlobalObject*);
60
61 private:
62     // This bit is set if any user modifies the constructor property Array.prototype. This is used to optimize species creation for JSArrays.
63     friend ArrayPrototypeAdaptiveInferredPropertyWatchpoint;
64     std::unique_ptr<ArrayPrototypeAdaptiveInferredPropertyWatchpoint> m_constructorWatchpoint;
65     std::unique_ptr<ArrayPrototypeAdaptiveInferredPropertyWatchpoint> m_constructorSpeciesWatchpoint;
66 };
67
68 EncodedJSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState*);
69 EncodedJSValue JSC_HOST_CALL arrayProtoFuncValues(ExecState*);
70 EncodedJSValue JSC_HOST_CALL arrayProtoPrivateFuncConcatMemcpy(ExecState*);
71 EncodedJSValue JSC_HOST_CALL arrayProtoPrivateFuncAppendMemcpy(ExecState*);
72
73 } // namespace JSC