// Automatically generated from Source/JavaScriptCore/runtime/JSGlobalObject.cpp using Source/JavaScriptCore/create_hash_table. DO NOT EDIT!

#include "JSCBuiltins.h"
#include "Lookup.h"

namespace JSC {

static const struct CompactHashIndex globalObjectTableIndex[132] = {
    { -1, -1 },
    { 8, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 29, -1 },
    { -1, -1 },
    { 20, -1 },
    { -1, -1 },
    { -1, -1 },
    { 0, -1 },
    { -1, -1 },
    { -1, -1 },
    { 27, -1 },
    { 9, 129 },
    { 1, -1 },
    { 17, -1 },
    { -1, -1 },
    { 21, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 19, -1 },
    { -1, -1 },
    { -1, -1 },
    { 30, -1 },
    { -1, -1 },
    { 28, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 4, 128 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 32, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 7, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 24, -1 },
    { -1, -1 },
    { 6, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 10, -1 },
    { -1, -1 },
    { 15, -1 },
    { 31, -1 },
    { -1, -1 },
    { -1, -1 },
    { 3, -1 },
    { -1, -1 },
    { -1, -1 },
    { 26, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 13, 131 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 2, 130 },
    { -1, -1 },
    { 22, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 11, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 23, -1 },
    { 14, -1 },
    { 25, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { -1, -1 },
    { 5, -1 },
    { 12, -1 },
    { 16, -1 },
    { 18, -1 },
};

static const struct HashTableValue globalObjectTableValues[33] = {
   { "parseFloat", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncParseFloat), (intptr_t)(1) } },
   { "isNaN", ((DontEnum|Function) & ~Function) | Builtin, NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(globalObjectIsNaNCodeGenerator), (intptr_t)1 } },
   { "isFinite", ((DontEnum|Function) & ~Function) | Builtin, NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(globalObjectIsFiniteCodeGenerator), (intptr_t)1 } },
   { "escape", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncEscape), (intptr_t)(1) } },
   { "unescape", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncUnescape), (intptr_t)(1) } },
   { "decodeURI", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncDecodeURI), (intptr_t)(1) } },
   { "decodeURIComponent", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncDecodeURIComponent), (intptr_t)(1) } },
   { "encodeURI", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncEncodeURI), (intptr_t)(1) } },
   { "encodeURIComponent", DontEnum|Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(globalFuncEncodeURIComponent), (intptr_t)(1) } },
   { "EvalError", DontEnum|CellProperty, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_evalErrorConstructor)), (intptr_t)(0) } },
   { "ReferenceError", DontEnum|CellProperty, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_referenceErrorConstructor)), (intptr_t)(0) } },
   { "SyntaxError", DontEnum|CellProperty, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_syntaxErrorConstructor)), (intptr_t)(0) } },
   { "URIError", DontEnum|CellProperty, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_URIErrorConstructor)), (intptr_t)(0) } },
   { "Proxy", DontEnum|PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createProxyProperty), (intptr_t)(0) } },
   { "JSON", DontEnum|PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createJSONProperty), (intptr_t)(0) } },
   { "Math", DontEnum|PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createMathProperty), (intptr_t)(0) } },
   { "console", DontEnum|PropertyCallback, NoIntrinsic, { (intptr_t)static_cast<LazyPropertyCallback>(createConsoleProperty), (intptr_t)(0) } },
   { "Int8Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayInt8)), (intptr_t)(0) } },
   { "Int16Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayInt16)), (intptr_t)(0) } },
   { "Int32Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayInt32)), (intptr_t)(0) } },
   { "Uint8Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayUint8)), (intptr_t)(0) } },
   { "Uint8ClampedArray", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayUint8Clamped)), (intptr_t)(0) } },
   { "Uint16Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayUint16)), (intptr_t)(0) } },
   { "Uint32Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayUint32)), (intptr_t)(0) } },
   { "Float32Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayFloat32)), (intptr_t)(0) } },
   { "Float64Array", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayFloat64)), (intptr_t)(0) } },
   { "DataView", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_typedArrayDataView)), (intptr_t)(0) } },
   { "Set", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_setStructure)), (intptr_t)(0) } },
   { "Date", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_dateStructure)), (intptr_t)(0) } },
   { "Boolean", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_booleanObjectStructure)), (intptr_t)(0) } },
   { "Number", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_numberObjectStructure)), (intptr_t)(0) } },
   { "WeakMap", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_weakMapStructure)), (intptr_t)(0) } },
   { "WeakSet", DontEnum|ClassStructure, NoIntrinsic, { (intptr_t)(OBJECT_OFFSETOF(JSGlobalObject, m_weakSetStructure)), (intptr_t)(0) } },
};

static const struct HashTable globalObjectTable =
    { 33, 127, false, globalObjectTableValues, globalObjectTableIndex };

} // namespace JSC
