We should support CreateThis in the FTL
[WebKit-https.git] / Source / JavaScriptCore / runtime / JSType.h
index fff4042..0cccfac 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2006-2011, 2015-2016 Apple Inc. All rights reserved.
+ *  Copyright (C) 2006-2018 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
  *
  */
 
-#ifndef JSType_h
-#define JSType_h
+#pragma once
 
 namespace JSC {
 
 enum JSType : uint8_t {
-    UnspecifiedType,
-    UndefinedType,
-    BooleanType,
-    NumberType,
-    NullType,
-
     // The CellType value must come before any JSType that is a JSCell.
     CellType,
     StringType,
     SymbolType,
+    BigIntType,
 
-    GetterSetterType,
     CustomGetterSetterType,
     APIValueWrapperType,
 
-    EvalExecutableType,
     ProgramExecutableType,
     ModuleProgramExecutableType,
+    EvalExecutableType,
     FunctionExecutableType,
-    WebAssemblyExecutableType,
 
     UnlinkedFunctionExecutableType,
+
     UnlinkedProgramCodeBlockType,
     UnlinkedModuleProgramCodeBlockType,
     UnlinkedEvalCodeBlockType,
     UnlinkedFunctionCodeBlockType,
+        
+    CodeBlockType,
+
+    JSFixedArrayType,
+    JSImmutableButterflyType,
+    JSSourceCodeType,
+    JSScriptFetcherType,
+    JSScriptFetchParametersType,
 
     // The ObjectType value must come before any JSType that is a subclass of JSObject.
     ObjectType,
     FinalObjectType,
     JSCalleeType,
     JSFunctionType,
+    InternalFunctionType,
     NumberObjectType,
     ErrorInstanceType,
     PureForwardingProxyType,
     ImpureProxyType,
-    WithScopeType,
     DirectArgumentsType,
     ScopedArgumentsType,
+    ClonedArgumentsType,
+
+    // Start JSArray types.
+    ArrayType,
+    DerivedArrayType,
+    // End JSArray types.
 
+    // Start JSArrayBufferView types. Keep in sync with the order of FOR_EACH_TYPED_ARRAY_TYPE_EXCLUDING_DATA_VIEW.
     Int8ArrayType,
-    Int16ArrayType,
-    Int32ArrayType,
     Uint8ArrayType,
     Uint8ClampedArrayType,
+    Int16ArrayType,
     Uint16ArrayType,
+    Int32ArrayType,
     Uint32ArrayType,
     Float32ArrayType,
     Float64ArrayType,
     DataViewType,
+    // End JSArrayBufferView types.
 
+    GetterSetterType,
+
+    // JSScope <- JSWithScope
+    //         <- StrictEvalActivation
+    //         <- JSSymbolTableObject  <- JSLexicalEnvironment      <- JSModuleEnvironment
+    //                                 <- JSSegmentedVariableObject <- JSGlobalLexicalEnvironment
+    //                                                              <- JSGlobalObject
+    // Start JSScope types.
+    // Start environment record types.
     GlobalObjectType,
-    LexicalEnvironmentType,
     GlobalLexicalEnvironmentType,
+    LexicalEnvironmentType,
     ModuleEnvironmentType,
+    StrictEvalActivationType,
+    // End environment record types.
+    WithScopeType,
+    // End JSScope types.
+
     RegExpObjectType,
     ProxyObjectType,
+    JSMapType,
+    JSSetType,
+    JSWeakMapType,
+    JSWeakSetType,
 
-    LastJSCObjectType = ProxyObjectType,
+    WebAssemblyToJSCalleeType,
+
+    LastJSCObjectType = WebAssemblyToJSCalleeType, // This is the last "JSC" Object type. After this, we have embedder's (e.g., WebCore) extended object types.
+    MaxJSType = 0b11111111,
 };
 
-COMPILE_ASSERT(sizeof(JSType) == sizeof(uint8_t), sizeof_jstype_is_one_byte);
+static const uint32_t FirstTypedArrayType = Int8ArrayType;
+static const uint32_t LastTypedArrayType = DataViewType;
 
-} // namespace JSC
+// LastObjectType should be MaxJSType (not LastJSCObjectType) since embedders can add their extended object types after the enums listed in JSType.
+static const uint32_t FirstObjectType = ObjectType;
+static const uint32_t LastObjectType = MaxJSType;
+
+static constexpr uint32_t NumberOfTypedArrayTypes = LastTypedArrayType - FirstTypedArrayType + 1;
+static constexpr uint32_t NumberOfTypedArrayTypesExcludingDataView = NumberOfTypedArrayTypes - 1;
 
-#endif
+static_assert(sizeof(JSType) == sizeof(uint8_t), "sizeof(JSType) is one byte.");
+static_assert(LastJSCObjectType < 128, "The highest bit is reserved for embedder's extension.");
+
+} // namespace JSC