JSArrayBuffer should have its own JSType
[WebKit-https.git] / Source / JavaScriptCore / runtime / JSType.h
1 /*
2  *  Copyright (C) 2006-2018 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 Library 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  *  Library General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Library General Public License
15  *  along with this library; see the file COPYING.LIB.  If not, write to
16  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  *  Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #pragma once
22
23 namespace JSC {
24
25 enum JSType : uint8_t {
26     // The CellType value must come before any JSType that is a JSCell.
27     CellType,
28     StringType,
29     SymbolType,
30     BigIntType,
31
32     CustomGetterSetterType,
33     APIValueWrapperType,
34
35     ProgramExecutableType,
36     ModuleProgramExecutableType,
37     EvalExecutableType,
38     FunctionExecutableType,
39
40     UnlinkedFunctionExecutableType,
41
42     UnlinkedProgramCodeBlockType,
43     UnlinkedModuleProgramCodeBlockType,
44     UnlinkedEvalCodeBlockType,
45     UnlinkedFunctionCodeBlockType,
46         
47     CodeBlockType,
48
49     JSFixedArrayType,
50     JSImmutableButterflyType,
51     JSSourceCodeType,
52     JSScriptFetcherType,
53     JSScriptFetchParametersType,
54
55     // The ObjectType value must come before any JSType that is a subclass of JSObject.
56     ObjectType,
57     FinalObjectType,
58     JSCalleeType,
59     JSFunctionType,
60     InternalFunctionType,
61     NumberObjectType,
62     ErrorInstanceType,
63     PureForwardingProxyType,
64     ImpureProxyType,
65     DirectArgumentsType,
66     ScopedArgumentsType,
67     ClonedArgumentsType,
68
69     // Start JSArray types.
70     ArrayType,
71     DerivedArrayType,
72     // End JSArray types.
73
74     ArrayBufferType,
75
76     // Start JSArrayBufferView types. Keep in sync with the order of FOR_EACH_TYPED_ARRAY_TYPE_EXCLUDING_DATA_VIEW.
77     Int8ArrayType,
78     Uint8ArrayType,
79     Uint8ClampedArrayType,
80     Int16ArrayType,
81     Uint16ArrayType,
82     Int32ArrayType,
83     Uint32ArrayType,
84     Float32ArrayType,
85     Float64ArrayType,
86     DataViewType,
87     // End JSArrayBufferView types.
88
89     GetterSetterType,
90
91     // JSScope <- JSWithScope
92     //         <- StrictEvalActivation
93     //         <- JSSymbolTableObject  <- JSLexicalEnvironment      <- JSModuleEnvironment
94     //                                 <- JSSegmentedVariableObject <- JSGlobalLexicalEnvironment
95     //                                                              <- JSGlobalObject
96     // Start JSScope types.
97     // Start environment record types.
98     GlobalObjectType,
99     GlobalLexicalEnvironmentType,
100     LexicalEnvironmentType,
101     ModuleEnvironmentType,
102     StrictEvalActivationType,
103     // End environment record types.
104     WithScopeType,
105     // End JSScope types.
106
107     RegExpObjectType,
108     ProxyObjectType,
109     JSMapType,
110     JSSetType,
111     JSWeakMapType,
112     JSWeakSetType,
113
114     WebAssemblyToJSCalleeType,
115
116     LastJSCObjectType = WebAssemblyToJSCalleeType, // This is the last "JSC" Object type. After this, we have embedder's (e.g., WebCore) extended object types.
117     MaxJSType = 0b11111111,
118 };
119
120 static const uint32_t FirstTypedArrayType = Int8ArrayType;
121 static const uint32_t LastTypedArrayType = DataViewType;
122
123 // LastObjectType should be MaxJSType (not LastJSCObjectType) since embedders can add their extended object types after the enums listed in JSType.
124 static const uint32_t FirstObjectType = ObjectType;
125 static const uint32_t LastObjectType = MaxJSType;
126
127 static constexpr uint32_t NumberOfTypedArrayTypes = LastTypedArrayType - FirstTypedArrayType + 1;
128 static constexpr uint32_t NumberOfTypedArrayTypesExcludingDataView = NumberOfTypedArrayTypes - 1;
129
130 static_assert(sizeof(JSType) == sizeof(uint8_t), "sizeof(JSType) is one byte.");
131 static_assert(LastJSCObjectType < 128, "The highest bit is reserved for embedder's extension.");
132
133 } // namespace JSC