/*
 * Copyright (c) 2014, 2015, 2016 -2016 Apple Inc. All rights reserved.
 * Copyright (c) 2014, 2015, 2016 Apple Inc. All rights reserved.
 * Copyright (c) 2015 Andy VanWagoner <thetalecrafter@gmail.com>.
 * Copyright (c) 2015 Jordan Harband. All rights reserved.
 * Copyright (c) 2015, 2016 -2016 Yusuke Suzuki <utatane.tea@gmail.com>.
 * Copyright (c) 2015, 2016 Yusuke Suzuki <utatane.tea@gmail.com>.
 * Copyright (c) 2016 Oleksandr Skachkov <gskachkov@gmail.com>.
 * Copyright (c) 2016 Yusuke Suzuki <utatane.tea@gmail.com>
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 * 
 */

// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py

#pragma once

namespace JSC {
class FunctionExecutable;
class VM;

enum class ConstructAbility : unsigned;
}

namespace JSC {

/* ArrayConstructor */
extern const char* s_arrayConstructorOfCode;
extern const int s_arrayConstructorOfCodeLength;
extern const JSC::ConstructAbility s_arrayConstructorOfCodeConstructAbility;
extern const char* s_arrayConstructorFromCode;
extern const int s_arrayConstructorFromCodeLength;
extern const JSC::ConstructAbility s_arrayConstructorFromCodeConstructAbility;
extern const char* s_arrayConstructorIsArrayCode;
extern const int s_arrayConstructorIsArrayCodeLength;
extern const JSC::ConstructAbility s_arrayConstructorIsArrayCodeConstructAbility;

#define JSC_FOREACH_ARRAYCONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(of, arrayConstructorOf, 0) \
    macro(from, arrayConstructorFrom, 1) \
    macro(isArray, arrayConstructorIsArray, 1) \

/* ArrayIteratorPrototype */
extern const char* s_arrayIteratorPrototypeNextCode;
extern const int s_arrayIteratorPrototypeNextCodeLength;
extern const JSC::ConstructAbility s_arrayIteratorPrototypeNextCodeConstructAbility;
extern const char* s_arrayIteratorPrototypeArrayIteratorValueNextCode;
extern const int s_arrayIteratorPrototypeArrayIteratorValueNextCodeLength;
extern const JSC::ConstructAbility s_arrayIteratorPrototypeArrayIteratorValueNextCodeConstructAbility;
extern const char* s_arrayIteratorPrototypeArrayIteratorKeyNextCode;
extern const int s_arrayIteratorPrototypeArrayIteratorKeyNextCodeLength;
extern const JSC::ConstructAbility s_arrayIteratorPrototypeArrayIteratorKeyNextCodeConstructAbility;
extern const char* s_arrayIteratorPrototypeArrayIteratorKeyValueNextCode;
extern const int s_arrayIteratorPrototypeArrayIteratorKeyValueNextCodeLength;
extern const JSC::ConstructAbility s_arrayIteratorPrototypeArrayIteratorKeyValueNextCodeConstructAbility;

#define JSC_FOREACH_ARRAYITERATORPROTOTYPE_BUILTIN_DATA(macro) \
    macro(next, arrayIteratorPrototypeNext, 0) \
    macro(arrayIteratorValueNext, arrayIteratorPrototypeArrayIteratorValueNext, 0) \
    macro(arrayIteratorKeyNext, arrayIteratorPrototypeArrayIteratorKeyNext, 0) \
    macro(arrayIteratorKeyValueNext, arrayIteratorPrototypeArrayIteratorKeyValueNext, 0) \

/* ArrayPrototype */
extern const char* s_arrayPrototypeCreateArrayIteratorConstructorCode;
extern const int s_arrayPrototypeCreateArrayIteratorConstructorCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeCreateArrayIteratorConstructorCodeConstructAbility;
extern const char* s_arrayPrototypeValuesCode;
extern const int s_arrayPrototypeValuesCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeValuesCodeConstructAbility;
extern const char* s_arrayPrototypeKeysCode;
extern const int s_arrayPrototypeKeysCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeKeysCodeConstructAbility;
extern const char* s_arrayPrototypeEntriesCode;
extern const int s_arrayPrototypeEntriesCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeEntriesCodeConstructAbility;
extern const char* s_arrayPrototypeReduceCode;
extern const int s_arrayPrototypeReduceCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeReduceCodeConstructAbility;
extern const char* s_arrayPrototypeReduceRightCode;
extern const int s_arrayPrototypeReduceRightCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeReduceRightCodeConstructAbility;
extern const char* s_arrayPrototypeEveryCode;
extern const int s_arrayPrototypeEveryCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeEveryCodeConstructAbility;
extern const char* s_arrayPrototypeForEachCode;
extern const int s_arrayPrototypeForEachCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeForEachCodeConstructAbility;
extern const char* s_arrayPrototypeFilterCode;
extern const int s_arrayPrototypeFilterCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeFilterCodeConstructAbility;
extern const char* s_arrayPrototypeMapCode;
extern const int s_arrayPrototypeMapCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeMapCodeConstructAbility;
extern const char* s_arrayPrototypeSomeCode;
extern const int s_arrayPrototypeSomeCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeSomeCodeConstructAbility;
extern const char* s_arrayPrototypeFillCode;
extern const int s_arrayPrototypeFillCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeFillCodeConstructAbility;
extern const char* s_arrayPrototypeFindCode;
extern const int s_arrayPrototypeFindCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeFindCodeConstructAbility;
extern const char* s_arrayPrototypeFindIndexCode;
extern const int s_arrayPrototypeFindIndexCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeFindIndexCodeConstructAbility;
extern const char* s_arrayPrototypeIncludesCode;
extern const int s_arrayPrototypeIncludesCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeIncludesCodeConstructAbility;
extern const char* s_arrayPrototypeSortCode;
extern const int s_arrayPrototypeSortCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeSortCodeConstructAbility;
extern const char* s_arrayPrototypeConcatSlowPathCode;
extern const int s_arrayPrototypeConcatSlowPathCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeConcatSlowPathCodeConstructAbility;
extern const char* s_arrayPrototypeConcatCode;
extern const int s_arrayPrototypeConcatCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeConcatCodeConstructAbility;
extern const char* s_arrayPrototypeCopyWithinCode;
extern const int s_arrayPrototypeCopyWithinCodeLength;
extern const JSC::ConstructAbility s_arrayPrototypeCopyWithinCodeConstructAbility;

#define JSC_FOREACH_ARRAYPROTOTYPE_BUILTIN_DATA(macro) \
    macro(createArrayIterator, arrayPrototypeCreateArrayIteratorConstructor, 3) \
    macro(values, arrayPrototypeValues, 0) \
    macro(keys, arrayPrototypeKeys, 0) \
    macro(entries, arrayPrototypeEntries, 0) \
    macro(reduce, arrayPrototypeReduce, 1) \
    macro(reduceRight, arrayPrototypeReduceRight, 1) \
    macro(every, arrayPrototypeEvery, 1) \
    macro(forEach, arrayPrototypeForEach, 1) \
    macro(filter, arrayPrototypeFilter, 1) \
    macro(map, arrayPrototypeMap, 1) \
    macro(some, arrayPrototypeSome, 1) \
    macro(fill, arrayPrototypeFill, 1) \
    macro(find, arrayPrototypeFind, 1) \
    macro(findIndex, arrayPrototypeFindIndex, 1) \
    macro(includes, arrayPrototypeIncludes, 1) \
    macro(sort, arrayPrototypeSort, 1) \
    macro(concatSlowPath, arrayPrototypeConcatSlowPath, 0) \
    macro(concat, arrayPrototypeConcat, 1) \
    macro(copyWithin, arrayPrototypeCopyWithin, 2) \

/* DatePrototype */
extern const char* s_datePrototypeToLocaleStringCode;
extern const int s_datePrototypeToLocaleStringCodeLength;
extern const JSC::ConstructAbility s_datePrototypeToLocaleStringCodeConstructAbility;
extern const char* s_datePrototypeToLocaleDateStringCode;
extern const int s_datePrototypeToLocaleDateStringCodeLength;
extern const JSC::ConstructAbility s_datePrototypeToLocaleDateStringCodeConstructAbility;
extern const char* s_datePrototypeToLocaleTimeStringCode;
extern const int s_datePrototypeToLocaleTimeStringCodeLength;
extern const JSC::ConstructAbility s_datePrototypeToLocaleTimeStringCodeConstructAbility;

#define JSC_FOREACH_DATEPROTOTYPE_BUILTIN_DATA(macro) \
    macro(toLocaleString, datePrototypeToLocaleString, 0) \
    macro(toLocaleDateString, datePrototypeToLocaleDateString, 0) \
    macro(toLocaleTimeString, datePrototypeToLocaleTimeString, 0) \

/* FunctionPrototype */
extern const char* s_functionPrototypeCallCode;
extern const int s_functionPrototypeCallCodeLength;
extern const JSC::ConstructAbility s_functionPrototypeCallCodeConstructAbility;
extern const char* s_functionPrototypeApplyCode;
extern const int s_functionPrototypeApplyCodeLength;
extern const JSC::ConstructAbility s_functionPrototypeApplyCodeConstructAbility;
extern const char* s_functionPrototypeSymbolHasInstanceCode;
extern const int s_functionPrototypeSymbolHasInstanceCodeLength;
extern const JSC::ConstructAbility s_functionPrototypeSymbolHasInstanceCodeConstructAbility;
extern const char* s_functionPrototypeBindCode;
extern const int s_functionPrototypeBindCodeLength;
extern const JSC::ConstructAbility s_functionPrototypeBindCodeConstructAbility;

#define JSC_FOREACH_FUNCTIONPROTOTYPE_BUILTIN_DATA(macro) \
    macro(call, functionPrototypeCall, 1) \
    macro(apply, functionPrototypeApply, 2) \
    macro(symbolHasInstance, functionPrototypeSymbolHasInstance, 1) \
    macro(bind, functionPrototypeBind, 1) \

/* GeneratorPrototype */
extern const char* s_generatorPrototypeGeneratorResumeCode;
extern const int s_generatorPrototypeGeneratorResumeCodeLength;
extern const JSC::ConstructAbility s_generatorPrototypeGeneratorResumeCodeConstructAbility;
extern const char* s_generatorPrototypeNextCode;
extern const int s_generatorPrototypeNextCodeLength;
extern const JSC::ConstructAbility s_generatorPrototypeNextCodeConstructAbility;
extern const char* s_generatorPrototypeReturnCode;
extern const int s_generatorPrototypeReturnCodeLength;
extern const JSC::ConstructAbility s_generatorPrototypeReturnCodeConstructAbility;
extern const char* s_generatorPrototypeThrowCode;
extern const int s_generatorPrototypeThrowCodeLength;
extern const JSC::ConstructAbility s_generatorPrototypeThrowCodeConstructAbility;

#define JSC_FOREACH_GENERATORPROTOTYPE_BUILTIN_DATA(macro) \
    macro(generatorResume, generatorPrototypeGeneratorResume, 3) \
    macro(next, generatorPrototypeNext, 1) \
    macro(return, generatorPrototypeReturn, 1) \
    macro(throw, generatorPrototypeThrow, 1) \

/* GlobalObject */
extern const char* s_globalObjectIsFiniteCode;
extern const int s_globalObjectIsFiniteCodeLength;
extern const JSC::ConstructAbility s_globalObjectIsFiniteCodeConstructAbility;
extern const char* s_globalObjectIsNaNCode;
extern const int s_globalObjectIsNaNCodeLength;
extern const JSC::ConstructAbility s_globalObjectIsNaNCodeConstructAbility;

#define JSC_FOREACH_GLOBALOBJECT_BUILTIN_DATA(macro) \
    macro(isFinite, globalObjectIsFinite, 1) \
    macro(isNaN, globalObjectIsNaN, 1) \

/* GlobalOperations */
extern const char* s_globalOperationsToIntegerCode;
extern const int s_globalOperationsToIntegerCodeLength;
extern const JSC::ConstructAbility s_globalOperationsToIntegerCodeConstructAbility;
extern const char* s_globalOperationsToLengthCode;
extern const int s_globalOperationsToLengthCodeLength;
extern const JSC::ConstructAbility s_globalOperationsToLengthCodeConstructAbility;
extern const char* s_globalOperationsIsDictionaryCode;
extern const int s_globalOperationsIsDictionaryCodeLength;
extern const JSC::ConstructAbility s_globalOperationsIsDictionaryCodeConstructAbility;
extern const char* s_globalOperationsSpeciesGetterCode;
extern const int s_globalOperationsSpeciesGetterCodeLength;
extern const JSC::ConstructAbility s_globalOperationsSpeciesGetterCodeConstructAbility;
extern const char* s_globalOperationsSpeciesConstructorCode;
extern const int s_globalOperationsSpeciesConstructorCodeLength;
extern const JSC::ConstructAbility s_globalOperationsSpeciesConstructorCodeConstructAbility;

#define JSC_FOREACH_GLOBALOPERATIONS_BUILTIN_DATA(macro) \
    macro(toInteger, globalOperationsToInteger, 1) \
    macro(toLength, globalOperationsToLength, 1) \
    macro(isDictionary, globalOperationsIsDictionary, 1) \
    macro(speciesGetter, globalOperationsSpeciesGetter, 0) \
    macro(speciesConstructor, globalOperationsSpeciesConstructor, 2) \

/* InspectorInstrumentationObject */
extern const char* s_inspectorInstrumentationObjectPromiseFulfilledCode;
extern const int s_inspectorInstrumentationObjectPromiseFulfilledCodeLength;
extern const JSC::ConstructAbility s_inspectorInstrumentationObjectPromiseFulfilledCodeConstructAbility;
extern const char* s_inspectorInstrumentationObjectPromiseRejectedCode;
extern const int s_inspectorInstrumentationObjectPromiseRejectedCodeLength;
extern const JSC::ConstructAbility s_inspectorInstrumentationObjectPromiseRejectedCodeConstructAbility;

#define JSC_FOREACH_INSPECTORINSTRUMENTATIONOBJECT_BUILTIN_DATA(macro) \
    macro(promiseFulfilled, inspectorInstrumentationObjectPromiseFulfilled, 3) \
    macro(promiseRejected, inspectorInstrumentationObjectPromiseRejected, 3) \

/* InternalPromiseConstructor */
extern const char* s_internalPromiseConstructorInternalAllCode;
extern const int s_internalPromiseConstructorInternalAllCodeLength;
extern const JSC::ConstructAbility s_internalPromiseConstructorInternalAllCodeConstructAbility;

#define JSC_FOREACH_INTERNALPROMISECONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(internalAll, internalPromiseConstructorInternalAll, 1) \

/* IteratorPrototype */
extern const char* s_iteratorPrototypeSymbolIteratorGetterCode;
extern const int s_iteratorPrototypeSymbolIteratorGetterCodeLength;
extern const JSC::ConstructAbility s_iteratorPrototypeSymbolIteratorGetterCodeConstructAbility;

#define JSC_FOREACH_ITERATORPROTOTYPE_BUILTIN_DATA(macro) \
    macro(symbolIteratorGetter, iteratorPrototypeSymbolIteratorGetter, 0) \

/* MapPrototype */
extern const char* s_mapPrototypeForEachCode;
extern const int s_mapPrototypeForEachCodeLength;
extern const JSC::ConstructAbility s_mapPrototypeForEachCodeConstructAbility;

#define JSC_FOREACH_MAPPROTOTYPE_BUILTIN_DATA(macro) \
    macro(forEach, mapPrototypeForEach, 1) \

/* ModuleLoaderPrototype */
extern const char* s_moduleLoaderPrototypeSetStateToMaxCode;
extern const int s_moduleLoaderPrototypeSetStateToMaxCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeSetStateToMaxCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeNewRegistryEntryCode;
extern const int s_moduleLoaderPrototypeNewRegistryEntryCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeNewRegistryEntryCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeEnsureRegisteredCode;
extern const int s_moduleLoaderPrototypeEnsureRegisteredCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeEnsureRegisteredCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeForceFulfillPromiseCode;
extern const int s_moduleLoaderPrototypeForceFulfillPromiseCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeForceFulfillPromiseCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeFulfillFetchCode;
extern const int s_moduleLoaderPrototypeFulfillFetchCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeFulfillFetchCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeFulfillTranslateCode;
extern const int s_moduleLoaderPrototypeFulfillTranslateCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeFulfillTranslateCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeFulfillInstantiateCode;
extern const int s_moduleLoaderPrototypeFulfillInstantiateCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeFulfillInstantiateCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeCommitInstantiatedCode;
extern const int s_moduleLoaderPrototypeCommitInstantiatedCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeCommitInstantiatedCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeInstantiationCode;
extern const int s_moduleLoaderPrototypeInstantiationCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeInstantiationCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestFetchCode;
extern const int s_moduleLoaderPrototypeRequestFetchCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestFetchCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestTranslateCode;
extern const int s_moduleLoaderPrototypeRequestTranslateCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestTranslateCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestInstantiateCode;
extern const int s_moduleLoaderPrototypeRequestInstantiateCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestInstantiateCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestSatisfyCode;
extern const int s_moduleLoaderPrototypeRequestSatisfyCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestSatisfyCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestInstantiateAllCode;
extern const int s_moduleLoaderPrototypeRequestInstantiateAllCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestInstantiateAllCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestLinkCode;
extern const int s_moduleLoaderPrototypeRequestLinkCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestLinkCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeRequestReadyCode;
extern const int s_moduleLoaderPrototypeRequestReadyCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeRequestReadyCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeLinkCode;
extern const int s_moduleLoaderPrototypeLinkCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeLinkCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeModuleEvaluationCode;
extern const int s_moduleLoaderPrototypeModuleEvaluationCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeModuleEvaluationCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeProvideCode;
extern const int s_moduleLoaderPrototypeProvideCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeProvideCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeLoadAndEvaluateModuleCode;
extern const int s_moduleLoaderPrototypeLoadAndEvaluateModuleCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeLoadAndEvaluateModuleCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeLoadModuleCode;
extern const int s_moduleLoaderPrototypeLoadModuleCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeLoadModuleCodeConstructAbility;
extern const char* s_moduleLoaderPrototypeLinkAndEvaluateModuleCode;
extern const int s_moduleLoaderPrototypeLinkAndEvaluateModuleCodeLength;
extern const JSC::ConstructAbility s_moduleLoaderPrototypeLinkAndEvaluateModuleCodeConstructAbility;

#define JSC_FOREACH_MODULELOADERPROTOTYPE_BUILTIN_DATA(macro) \
    macro(setStateToMax, moduleLoaderPrototypeSetStateToMax, 2) \
    macro(newRegistryEntry, moduleLoaderPrototypeNewRegistryEntry, 1) \
    macro(ensureRegistered, moduleLoaderPrototypeEnsureRegistered, 1) \
    macro(forceFulfillPromise, moduleLoaderPrototypeForceFulfillPromise, 2) \
    macro(fulfillFetch, moduleLoaderPrototypeFulfillFetch, 2) \
    macro(fulfillTranslate, moduleLoaderPrototypeFulfillTranslate, 2) \
    macro(fulfillInstantiate, moduleLoaderPrototypeFulfillInstantiate, 3) \
    macro(commitInstantiated, moduleLoaderPrototypeCommitInstantiated, 3) \
    macro(instantiation, moduleLoaderPrototypeInstantiation, 3) \
    macro(requestFetch, moduleLoaderPrototypeRequestFetch, 2) \
    macro(requestTranslate, moduleLoaderPrototypeRequestTranslate, 2) \
    macro(requestInstantiate, moduleLoaderPrototypeRequestInstantiate, 2) \
    macro(requestSatisfy, moduleLoaderPrototypeRequestSatisfy, 2) \
    macro(requestInstantiateAll, moduleLoaderPrototypeRequestInstantiateAll, 2) \
    macro(requestLink, moduleLoaderPrototypeRequestLink, 2) \
    macro(requestReady, moduleLoaderPrototypeRequestReady, 2) \
    macro(link, moduleLoaderPrototypeLink, 2) \
    macro(moduleEvaluation, moduleLoaderPrototypeModuleEvaluation, 2) \
    macro(provide, moduleLoaderPrototypeProvide, 3) \
    macro(loadAndEvaluateModule, moduleLoaderPrototypeLoadAndEvaluateModule, 3) \
    macro(loadModule, moduleLoaderPrototypeLoadModule, 3) \
    macro(linkAndEvaluateModule, moduleLoaderPrototypeLinkAndEvaluateModule, 2) \

/* NumberConstructor */
extern const char* s_numberConstructorIsFiniteCode;
extern const int s_numberConstructorIsFiniteCodeLength;
extern const JSC::ConstructAbility s_numberConstructorIsFiniteCodeConstructAbility;
extern const char* s_numberConstructorIsNaNCode;
extern const int s_numberConstructorIsNaNCodeLength;
extern const JSC::ConstructAbility s_numberConstructorIsNaNCodeConstructAbility;

#define JSC_FOREACH_NUMBERCONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(isFinite, numberConstructorIsFinite, 1) \
    macro(isNaN, numberConstructorIsNaN, 1) \

/* NumberPrototype */
extern const char* s_numberPrototypeToLocaleStringCode;
extern const int s_numberPrototypeToLocaleStringCodeLength;
extern const JSC::ConstructAbility s_numberPrototypeToLocaleStringCodeConstructAbility;

#define JSC_FOREACH_NUMBERPROTOTYPE_BUILTIN_DATA(macro) \
    macro(toLocaleString, numberPrototypeToLocaleString, 0) \

/* ObjectConstructor */
extern const char* s_objectConstructorEnumerableOwnPropertiesCode;
extern const int s_objectConstructorEnumerableOwnPropertiesCodeLength;
extern const JSC::ConstructAbility s_objectConstructorEnumerableOwnPropertiesCodeConstructAbility;
extern const char* s_objectConstructorValuesCode;
extern const int s_objectConstructorValuesCodeLength;
extern const JSC::ConstructAbility s_objectConstructorValuesCodeConstructAbility;
extern const char* s_objectConstructorEntriesCode;
extern const int s_objectConstructorEntriesCodeLength;
extern const JSC::ConstructAbility s_objectConstructorEntriesCodeConstructAbility;
extern const char* s_objectConstructorAssignCode;
extern const int s_objectConstructorAssignCodeLength;
extern const JSC::ConstructAbility s_objectConstructorAssignCodeConstructAbility;

#define JSC_FOREACH_OBJECTCONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(enumerableOwnProperties, objectConstructorEnumerableOwnProperties, 2) \
    macro(values, objectConstructorValues, 1) \
    macro(entries, objectConstructorEntries, 1) \
    macro(assign, objectConstructorAssign, 2) \

/* PromiseConstructor */
extern const char* s_promiseConstructorAllCode;
extern const int s_promiseConstructorAllCodeLength;
extern const JSC::ConstructAbility s_promiseConstructorAllCodeConstructAbility;
extern const char* s_promiseConstructorRaceCode;
extern const int s_promiseConstructorRaceCodeLength;
extern const JSC::ConstructAbility s_promiseConstructorRaceCodeConstructAbility;
extern const char* s_promiseConstructorRejectCode;
extern const int s_promiseConstructorRejectCodeLength;
extern const JSC::ConstructAbility s_promiseConstructorRejectCodeConstructAbility;
extern const char* s_promiseConstructorResolveCode;
extern const int s_promiseConstructorResolveCodeLength;
extern const JSC::ConstructAbility s_promiseConstructorResolveCodeConstructAbility;

#define JSC_FOREACH_PROMISECONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(all, promiseConstructorAll, 1) \
    macro(race, promiseConstructorRace, 1) \
    macro(reject, promiseConstructorReject, 1) \
    macro(resolve, promiseConstructorResolve, 1) \

/* PromiseOperations */
extern const char* s_promiseOperationsIsPromiseCode;
extern const int s_promiseOperationsIsPromiseCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsIsPromiseCodeConstructAbility;
extern const char* s_promiseOperationsNewPromiseReactionCode;
extern const int s_promiseOperationsNewPromiseReactionCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsNewPromiseReactionCodeConstructAbility;
extern const char* s_promiseOperationsNewPromiseCapabilityCode;
extern const int s_promiseOperationsNewPromiseCapabilityCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsNewPromiseCapabilityCodeConstructAbility;
extern const char* s_promiseOperationsTriggerPromiseReactionsCode;
extern const int s_promiseOperationsTriggerPromiseReactionsCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsTriggerPromiseReactionsCodeConstructAbility;
extern const char* s_promiseOperationsRejectPromiseCode;
extern const int s_promiseOperationsRejectPromiseCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsRejectPromiseCodeConstructAbility;
extern const char* s_promiseOperationsFulfillPromiseCode;
extern const int s_promiseOperationsFulfillPromiseCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsFulfillPromiseCodeConstructAbility;
extern const char* s_promiseOperationsCreateResolvingFunctionsCode;
extern const int s_promiseOperationsCreateResolvingFunctionsCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsCreateResolvingFunctionsCodeConstructAbility;
extern const char* s_promiseOperationsPromiseReactionJobCode;
extern const int s_promiseOperationsPromiseReactionJobCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsPromiseReactionJobCodeConstructAbility;
extern const char* s_promiseOperationsPromiseResolveThenableJobCode;
extern const int s_promiseOperationsPromiseResolveThenableJobCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsPromiseResolveThenableJobCodeConstructAbility;
extern const char* s_promiseOperationsInitializePromiseCode;
extern const int s_promiseOperationsInitializePromiseCodeLength;
extern const JSC::ConstructAbility s_promiseOperationsInitializePromiseCodeConstructAbility;

#define JSC_FOREACH_PROMISEOPERATIONS_BUILTIN_DATA(macro) \
    macro(isPromise, promiseOperationsIsPromise, 1) \
    macro(newPromiseReaction, promiseOperationsNewPromiseReaction, 2) \
    macro(newPromiseCapability, promiseOperationsNewPromiseCapability, 1) \
    macro(triggerPromiseReactions, promiseOperationsTriggerPromiseReactions, 2) \
    macro(rejectPromise, promiseOperationsRejectPromise, 2) \
    macro(fulfillPromise, promiseOperationsFulfillPromise, 2) \
    macro(createResolvingFunctions, promiseOperationsCreateResolvingFunctions, 1) \
    macro(promiseReactionJob, promiseOperationsPromiseReactionJob, 2) \
    macro(promiseResolveThenableJob, promiseOperationsPromiseResolveThenableJob, 3) \
    macro(initializePromise, promiseOperationsInitializePromise, 1) \

/* PromisePrototype */
extern const char* s_promisePrototypeCatchCode;
extern const int s_promisePrototypeCatchCodeLength;
extern const JSC::ConstructAbility s_promisePrototypeCatchCodeConstructAbility;
extern const char* s_promisePrototypeThenCode;
extern const int s_promisePrototypeThenCodeLength;
extern const JSC::ConstructAbility s_promisePrototypeThenCodeConstructAbility;

#define JSC_FOREACH_PROMISEPROTOTYPE_BUILTIN_DATA(macro) \
    macro(catch, promisePrototypeCatch, 1) \
    macro(then, promisePrototypeThen, 2) \

/* ReflectObject */
extern const char* s_reflectObjectApplyCode;
extern const int s_reflectObjectApplyCodeLength;
extern const JSC::ConstructAbility s_reflectObjectApplyCodeConstructAbility;
extern const char* s_reflectObjectDeletePropertyCode;
extern const int s_reflectObjectDeletePropertyCodeLength;
extern const JSC::ConstructAbility s_reflectObjectDeletePropertyCodeConstructAbility;
extern const char* s_reflectObjectHasCode;
extern const int s_reflectObjectHasCodeLength;
extern const JSC::ConstructAbility s_reflectObjectHasCodeConstructAbility;

#define JSC_FOREACH_REFLECTOBJECT_BUILTIN_DATA(macro) \
    macro(apply, reflectObjectApply, 3) \
    macro(deleteProperty, reflectObjectDeleteProperty, 2) \
    macro(has, reflectObjectHas, 2) \

/* RegExpPrototype */
extern const char* s_regExpPrototypeAdvanceStringIndexCode;
extern const int s_regExpPrototypeAdvanceStringIndexCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeAdvanceStringIndexCodeConstructAbility;
extern const char* s_regExpPrototypeRegExpExecCode;
extern const int s_regExpPrototypeRegExpExecCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeRegExpExecCodeConstructAbility;
extern const char* s_regExpPrototypeHasObservableSideEffectsForRegExpMatchCode;
extern const int s_regExpPrototypeHasObservableSideEffectsForRegExpMatchCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeHasObservableSideEffectsForRegExpMatchCodeConstructAbility;
extern const char* s_regExpPrototypeMatchCode;
extern const int s_regExpPrototypeMatchCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeMatchCodeConstructAbility;
extern const char* s_regExpPrototypeReplaceCode;
extern const int s_regExpPrototypeReplaceCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeReplaceCodeConstructAbility;
extern const char* s_regExpPrototypeSearchCode;
extern const int s_regExpPrototypeSearchCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeSearchCodeConstructAbility;
extern const char* s_regExpPrototypeHasObservableSideEffectsForRegExpSplitCode;
extern const int s_regExpPrototypeHasObservableSideEffectsForRegExpSplitCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeHasObservableSideEffectsForRegExpSplitCodeConstructAbility;
extern const char* s_regExpPrototypeSplitCode;
extern const int s_regExpPrototypeSplitCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeSplitCodeConstructAbility;
extern const char* s_regExpPrototypeTestCode;
extern const int s_regExpPrototypeTestCodeLength;
extern const JSC::ConstructAbility s_regExpPrototypeTestCodeConstructAbility;

#define JSC_FOREACH_REGEXPPROTOTYPE_BUILTIN_DATA(macro) \
    macro(advanceStringIndex, regExpPrototypeAdvanceStringIndex, 3) \
    macro(regExpExec, regExpPrototypeRegExpExec, 2) \
    macro(hasObservableSideEffectsForRegExpMatch, regExpPrototypeHasObservableSideEffectsForRegExpMatch, 1) \
    macro(match, regExpPrototypeMatch, 1) \
    macro(replace, regExpPrototypeReplace, 2) \
    macro(search, regExpPrototypeSearch, 1) \
    macro(hasObservableSideEffectsForRegExpSplit, regExpPrototypeHasObservableSideEffectsForRegExpSplit, 1) \
    macro(split, regExpPrototypeSplit, 2) \
    macro(test, regExpPrototypeTest, 1) \

/* SetPrototype */
extern const char* s_setPrototypeForEachCode;
extern const int s_setPrototypeForEachCodeLength;
extern const JSC::ConstructAbility s_setPrototypeForEachCodeConstructAbility;

#define JSC_FOREACH_SETPROTOTYPE_BUILTIN_DATA(macro) \
    macro(forEach, setPrototypeForEach, 1) \

/* StringConstructor */
extern const char* s_stringConstructorRawCode;
extern const int s_stringConstructorRawCodeLength;
extern const JSC::ConstructAbility s_stringConstructorRawCodeConstructAbility;

#define JSC_FOREACH_STRINGCONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(raw, stringConstructorRaw, 1) \

/* StringIteratorPrototype */
extern const char* s_stringIteratorPrototypeNextCode;
extern const int s_stringIteratorPrototypeNextCodeLength;
extern const JSC::ConstructAbility s_stringIteratorPrototypeNextCodeConstructAbility;

#define JSC_FOREACH_STRINGITERATORPROTOTYPE_BUILTIN_DATA(macro) \
    macro(next, stringIteratorPrototypeNext, 0) \

/* StringPrototype */
extern const char* s_stringPrototypeMatchCode;
extern const int s_stringPrototypeMatchCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeMatchCodeConstructAbility;
extern const char* s_stringPrototypeRepeatSlowPathCode;
extern const int s_stringPrototypeRepeatSlowPathCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeRepeatSlowPathCodeConstructAbility;
extern const char* s_stringPrototypeRepeatCharactersSlowPathCode;
extern const int s_stringPrototypeRepeatCharactersSlowPathCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeRepeatCharactersSlowPathCodeConstructAbility;
extern const char* s_stringPrototypeRepeatCode;
extern const int s_stringPrototypeRepeatCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeRepeatCodeConstructAbility;
extern const char* s_stringPrototypePadStartCode;
extern const int s_stringPrototypePadStartCodeLength;
extern const JSC::ConstructAbility s_stringPrototypePadStartCodeConstructAbility;
extern const char* s_stringPrototypePadEndCode;
extern const int s_stringPrototypePadEndCodeLength;
extern const JSC::ConstructAbility s_stringPrototypePadEndCodeConstructAbility;
extern const char* s_stringPrototypeHasObservableSideEffectsForStringReplaceCode;
extern const int s_stringPrototypeHasObservableSideEffectsForStringReplaceCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeHasObservableSideEffectsForStringReplaceCodeConstructAbility;
extern const char* s_stringPrototypeReplaceCode;
extern const int s_stringPrototypeReplaceCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeReplaceCodeConstructAbility;
extern const char* s_stringPrototypeLocaleCompareCode;
extern const int s_stringPrototypeLocaleCompareCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeLocaleCompareCodeConstructAbility;
extern const char* s_stringPrototypeSearchCode;
extern const int s_stringPrototypeSearchCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeSearchCodeConstructAbility;
extern const char* s_stringPrototypeSplitCode;
extern const int s_stringPrototypeSplitCodeLength;
extern const JSC::ConstructAbility s_stringPrototypeSplitCodeConstructAbility;

#define JSC_FOREACH_STRINGPROTOTYPE_BUILTIN_DATA(macro) \
    macro(match, stringPrototypeMatch, 1) \
    macro(repeatSlowPath, stringPrototypeRepeatSlowPath, 2) \
    macro(repeatCharactersSlowPath, stringPrototypeRepeatCharactersSlowPath, 2) \
    macro(repeat, stringPrototypeRepeat, 1) \
    macro(padStart, stringPrototypePadStart, 1) \
    macro(padEnd, stringPrototypePadEnd, 1) \
    macro(hasObservableSideEffectsForStringReplace, stringPrototypeHasObservableSideEffectsForStringReplace, 2) \
    macro(replace, stringPrototypeReplace, 2) \
    macro(localeCompare, stringPrototypeLocaleCompare, 1) \
    macro(search, stringPrototypeSearch, 1) \
    macro(split, stringPrototypeSplit, 2) \

/* TypedArrayConstructor */
extern const char* s_typedArrayConstructorOfCode;
extern const int s_typedArrayConstructorOfCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorOfCodeConstructAbility;
extern const char* s_typedArrayConstructorFromCode;
extern const int s_typedArrayConstructorFromCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorFromCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateInt8ArrayCode;
extern const int s_typedArrayConstructorAllocateInt8ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateInt8ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateInt16ArrayCode;
extern const int s_typedArrayConstructorAllocateInt16ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateInt16ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateInt32ArrayCode;
extern const int s_typedArrayConstructorAllocateInt32ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateInt32ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateUint32ArrayCode;
extern const int s_typedArrayConstructorAllocateUint32ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateUint32ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateUint16ArrayCode;
extern const int s_typedArrayConstructorAllocateUint16ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateUint16ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateUint8ArrayCode;
extern const int s_typedArrayConstructorAllocateUint8ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateUint8ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateUint8ClampedArrayCode;
extern const int s_typedArrayConstructorAllocateUint8ClampedArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateUint8ClampedArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateFloat32ArrayCode;
extern const int s_typedArrayConstructorAllocateFloat32ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateFloat32ArrayCodeConstructAbility;
extern const char* s_typedArrayConstructorAllocateFloat64ArrayCode;
extern const int s_typedArrayConstructorAllocateFloat64ArrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayConstructorAllocateFloat64ArrayCodeConstructAbility;

#define JSC_FOREACH_TYPEDARRAYCONSTRUCTOR_BUILTIN_DATA(macro) \
    macro(of, typedArrayConstructorOf, 0) \
    macro(from, typedArrayConstructorFrom, 1) \
    macro(allocateInt8Array, typedArrayConstructorAllocateInt8Array, 1) \
    macro(allocateInt16Array, typedArrayConstructorAllocateInt16Array, 1) \
    macro(allocateInt32Array, typedArrayConstructorAllocateInt32Array, 1) \
    macro(allocateUint32Array, typedArrayConstructorAllocateUint32Array, 1) \
    macro(allocateUint16Array, typedArrayConstructorAllocateUint16Array, 1) \
    macro(allocateUint8Array, typedArrayConstructorAllocateUint8Array, 1) \
    macro(allocateUint8ClampedArray, typedArrayConstructorAllocateUint8ClampedArray, 1) \
    macro(allocateFloat32Array, typedArrayConstructorAllocateFloat32Array, 1) \
    macro(allocateFloat64Array, typedArrayConstructorAllocateFloat64Array, 1) \

/* TypedArrayPrototype */
extern const char* s_typedArrayPrototypeTypedArraySpeciesConstructorCode;
extern const int s_typedArrayPrototypeTypedArraySpeciesConstructorCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeTypedArraySpeciesConstructorCodeConstructAbility;
extern const char* s_typedArrayPrototypeTypedArrayClampArgumentToStartOrEndCode;
extern const int s_typedArrayPrototypeTypedArrayClampArgumentToStartOrEndCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeTypedArrayClampArgumentToStartOrEndCodeConstructAbility;
extern const char* s_typedArrayPrototypeValuesCode;
extern const int s_typedArrayPrototypeValuesCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeValuesCodeConstructAbility;
extern const char* s_typedArrayPrototypeKeysCode;
extern const int s_typedArrayPrototypeKeysCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeKeysCodeConstructAbility;
extern const char* s_typedArrayPrototypeEntriesCode;
extern const int s_typedArrayPrototypeEntriesCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeEntriesCodeConstructAbility;
extern const char* s_typedArrayPrototypeEveryCode;
extern const int s_typedArrayPrototypeEveryCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeEveryCodeConstructAbility;
extern const char* s_typedArrayPrototypeFillCode;
extern const int s_typedArrayPrototypeFillCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeFillCodeConstructAbility;
extern const char* s_typedArrayPrototypeFindCode;
extern const int s_typedArrayPrototypeFindCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeFindCodeConstructAbility;
extern const char* s_typedArrayPrototypeFindIndexCode;
extern const int s_typedArrayPrototypeFindIndexCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeFindIndexCodeConstructAbility;
extern const char* s_typedArrayPrototypeForEachCode;
extern const int s_typedArrayPrototypeForEachCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeForEachCodeConstructAbility;
extern const char* s_typedArrayPrototypeSomeCode;
extern const int s_typedArrayPrototypeSomeCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeSomeCodeConstructAbility;
extern const char* s_typedArrayPrototypeSortCode;
extern const int s_typedArrayPrototypeSortCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeSortCodeConstructAbility;
extern const char* s_typedArrayPrototypeSubarrayCode;
extern const int s_typedArrayPrototypeSubarrayCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeSubarrayCodeConstructAbility;
extern const char* s_typedArrayPrototypeReduceCode;
extern const int s_typedArrayPrototypeReduceCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeReduceCodeConstructAbility;
extern const char* s_typedArrayPrototypeReduceRightCode;
extern const int s_typedArrayPrototypeReduceRightCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeReduceRightCodeConstructAbility;
extern const char* s_typedArrayPrototypeMapCode;
extern const int s_typedArrayPrototypeMapCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeMapCodeConstructAbility;
extern const char* s_typedArrayPrototypeFilterCode;
extern const int s_typedArrayPrototypeFilterCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeFilterCodeConstructAbility;
extern const char* s_typedArrayPrototypeToLocaleStringCode;
extern const int s_typedArrayPrototypeToLocaleStringCodeLength;
extern const JSC::ConstructAbility s_typedArrayPrototypeToLocaleStringCodeConstructAbility;

#define JSC_FOREACH_TYPEDARRAYPROTOTYPE_BUILTIN_DATA(macro) \
    macro(typedArraySpeciesConstructor, typedArrayPrototypeTypedArraySpeciesConstructor, 1) \
    macro(typedArrayClampArgumentToStartOrEnd, typedArrayPrototypeTypedArrayClampArgumentToStartOrEnd, 3) \
    macro(values, typedArrayPrototypeValues, 0) \
    macro(keys, typedArrayPrototypeKeys, 0) \
    macro(entries, typedArrayPrototypeEntries, 0) \
    macro(every, typedArrayPrototypeEvery, 1) \
    macro(fill, typedArrayPrototypeFill, 1) \
    macro(find, typedArrayPrototypeFind, 1) \
    macro(findIndex, typedArrayPrototypeFindIndex, 1) \
    macro(forEach, typedArrayPrototypeForEach, 1) \
    macro(some, typedArrayPrototypeSome, 1) \
    macro(sort, typedArrayPrototypeSort, 1) \
    macro(subarray, typedArrayPrototypeSubarray, 2) \
    macro(reduce, typedArrayPrototypeReduce, 1) \
    macro(reduceRight, typedArrayPrototypeReduceRight, 1) \
    macro(map, typedArrayPrototypeMap, 1) \
    macro(filter, typedArrayPrototypeFilter, 1) \
    macro(toLocaleString, typedArrayPrototypeToLocaleString, 0) \

#define JSC_FOREACH_BUILTIN_CODE(macro) \
    macro(arrayConstructorIsArrayCode, isArray, s_arrayConstructorIsArrayCodeLength) \
    macro(arrayConstructorFromCode, from, s_arrayConstructorFromCodeLength) \
    macro(arrayConstructorOfCode, of, s_arrayConstructorOfCodeLength) \
    macro(arrayIteratorPrototypeNextCode, next, s_arrayIteratorPrototypeNextCodeLength) \
    macro(arrayIteratorPrototypeArrayIteratorValueNextCode, arrayIteratorValueNext, s_arrayIteratorPrototypeArrayIteratorValueNextCodeLength) \
    macro(arrayIteratorPrototypeArrayIteratorKeyNextCode, arrayIteratorKeyNext, s_arrayIteratorPrototypeArrayIteratorKeyNextCodeLength) \
    macro(arrayIteratorPrototypeArrayIteratorKeyValueNextCode, arrayIteratorKeyValueNext, s_arrayIteratorPrototypeArrayIteratorKeyValueNextCodeLength) \
    macro(arrayPrototypeCreateArrayIteratorConstructorCode, createArrayIterator, s_arrayPrototypeCreateArrayIteratorConstructorCodeLength) \
    macro(arrayPrototypeValuesCode, values, s_arrayPrototypeValuesCodeLength) \
    macro(arrayPrototypeKeysCode, keys, s_arrayPrototypeKeysCodeLength) \
    macro(arrayPrototypeEntriesCode, entries, s_arrayPrototypeEntriesCodeLength) \
    macro(arrayPrototypeReduceCode, reduce, s_arrayPrototypeReduceCodeLength) \
    macro(arrayPrototypeReduceRightCode, reduceRight, s_arrayPrototypeReduceRightCodeLength) \
    macro(arrayPrototypeEveryCode, every, s_arrayPrototypeEveryCodeLength) \
    macro(arrayPrototypeForEachCode, forEach, s_arrayPrototypeForEachCodeLength) \
    macro(arrayPrototypeFilterCode, filter, s_arrayPrototypeFilterCodeLength) \
    macro(arrayPrototypeMapCode, map, s_arrayPrototypeMapCodeLength) \
    macro(arrayPrototypeSomeCode, some, s_arrayPrototypeSomeCodeLength) \
    macro(arrayPrototypeFillCode, fill, s_arrayPrototypeFillCodeLength) \
    macro(arrayPrototypeFindCode, find, s_arrayPrototypeFindCodeLength) \
    macro(arrayPrototypeFindIndexCode, findIndex, s_arrayPrototypeFindIndexCodeLength) \
    macro(arrayPrototypeIncludesCode, includes, s_arrayPrototypeIncludesCodeLength) \
    macro(arrayPrototypeSortCode, sort, s_arrayPrototypeSortCodeLength) \
    macro(arrayPrototypeConcatSlowPathCode, concatSlowPath, s_arrayPrototypeConcatSlowPathCodeLength) \
    macro(arrayPrototypeConcatCode, concat, s_arrayPrototypeConcatCodeLength) \
    macro(arrayPrototypeCopyWithinCode, copyWithin, s_arrayPrototypeCopyWithinCodeLength) \
    macro(datePrototypeToLocaleStringCode, toLocaleString, s_datePrototypeToLocaleStringCodeLength) \
    macro(datePrototypeToLocaleDateStringCode, toLocaleDateString, s_datePrototypeToLocaleDateStringCodeLength) \
    macro(datePrototypeToLocaleTimeStringCode, toLocaleTimeString, s_datePrototypeToLocaleTimeStringCodeLength) \
    macro(functionPrototypeCallCode, call, s_functionPrototypeCallCodeLength) \
    macro(functionPrototypeApplyCode, apply, s_functionPrototypeApplyCodeLength) \
    macro(functionPrototypeSymbolHasInstanceCode, symbolHasInstance, s_functionPrototypeSymbolHasInstanceCodeLength) \
    macro(functionPrototypeBindCode, bind, s_functionPrototypeBindCodeLength) \
    macro(generatorPrototypeGeneratorResumeCode, generatorResume, s_generatorPrototypeGeneratorResumeCodeLength) \
    macro(generatorPrototypeNextCode, next, s_generatorPrototypeNextCodeLength) \
    macro(generatorPrototypeReturnCode, return, s_generatorPrototypeReturnCodeLength) \
    macro(generatorPrototypeThrowCode, throw, s_generatorPrototypeThrowCodeLength) \
    macro(globalObjectIsFiniteCode, isFinite, s_globalObjectIsFiniteCodeLength) \
    macro(globalObjectIsNaNCode, isNaN, s_globalObjectIsNaNCodeLength) \
    macro(globalOperationsToIntegerCode, toInteger, s_globalOperationsToIntegerCodeLength) \
    macro(globalOperationsToLengthCode, toLength, s_globalOperationsToLengthCodeLength) \
    macro(globalOperationsIsDictionaryCode, isDictionary, s_globalOperationsIsDictionaryCodeLength) \
    macro(globalOperationsSpeciesGetterCode, speciesGetter, s_globalOperationsSpeciesGetterCodeLength) \
    macro(globalOperationsSpeciesConstructorCode, speciesConstructor, s_globalOperationsSpeciesConstructorCodeLength) \
    macro(inspectorInstrumentationObjectPromiseFulfilledCode, promiseFulfilled, s_inspectorInstrumentationObjectPromiseFulfilledCodeLength) \
    macro(inspectorInstrumentationObjectPromiseRejectedCode, promiseRejected, s_inspectorInstrumentationObjectPromiseRejectedCodeLength) \
    macro(internalPromiseConstructorInternalAllCode, internalAll, s_internalPromiseConstructorInternalAllCodeLength) \
    macro(iteratorPrototypeSymbolIteratorGetterCode, symbolIteratorGetter, s_iteratorPrototypeSymbolIteratorGetterCodeLength) \
    macro(mapPrototypeForEachCode, forEach, s_mapPrototypeForEachCodeLength) \
    macro(moduleLoaderPrototypeSetStateToMaxCode, setStateToMax, s_moduleLoaderPrototypeSetStateToMaxCodeLength) \
    macro(moduleLoaderPrototypeNewRegistryEntryCode, newRegistryEntry, s_moduleLoaderPrototypeNewRegistryEntryCodeLength) \
    macro(moduleLoaderPrototypeEnsureRegisteredCode, ensureRegistered, s_moduleLoaderPrototypeEnsureRegisteredCodeLength) \
    macro(moduleLoaderPrototypeForceFulfillPromiseCode, forceFulfillPromise, s_moduleLoaderPrototypeForceFulfillPromiseCodeLength) \
    macro(moduleLoaderPrototypeFulfillFetchCode, fulfillFetch, s_moduleLoaderPrototypeFulfillFetchCodeLength) \
    macro(moduleLoaderPrototypeFulfillTranslateCode, fulfillTranslate, s_moduleLoaderPrototypeFulfillTranslateCodeLength) \
    macro(moduleLoaderPrototypeFulfillInstantiateCode, fulfillInstantiate, s_moduleLoaderPrototypeFulfillInstantiateCodeLength) \
    macro(moduleLoaderPrototypeCommitInstantiatedCode, commitInstantiated, s_moduleLoaderPrototypeCommitInstantiatedCodeLength) \
    macro(moduleLoaderPrototypeInstantiationCode, instantiation, s_moduleLoaderPrototypeInstantiationCodeLength) \
    macro(moduleLoaderPrototypeRequestFetchCode, requestFetch, s_moduleLoaderPrototypeRequestFetchCodeLength) \
    macro(moduleLoaderPrototypeRequestTranslateCode, requestTranslate, s_moduleLoaderPrototypeRequestTranslateCodeLength) \
    macro(moduleLoaderPrototypeRequestInstantiateCode, requestInstantiate, s_moduleLoaderPrototypeRequestInstantiateCodeLength) \
    macro(moduleLoaderPrototypeRequestSatisfyCode, requestSatisfy, s_moduleLoaderPrototypeRequestSatisfyCodeLength) \
    macro(moduleLoaderPrototypeRequestInstantiateAllCode, requestInstantiateAll, s_moduleLoaderPrototypeRequestInstantiateAllCodeLength) \
    macro(moduleLoaderPrototypeRequestLinkCode, requestLink, s_moduleLoaderPrototypeRequestLinkCodeLength) \
    macro(moduleLoaderPrototypeRequestReadyCode, requestReady, s_moduleLoaderPrototypeRequestReadyCodeLength) \
    macro(moduleLoaderPrototypeLinkCode, link, s_moduleLoaderPrototypeLinkCodeLength) \
    macro(moduleLoaderPrototypeModuleEvaluationCode, moduleEvaluation, s_moduleLoaderPrototypeModuleEvaluationCodeLength) \
    macro(moduleLoaderPrototypeProvideCode, provide, s_moduleLoaderPrototypeProvideCodeLength) \
    macro(moduleLoaderPrototypeLoadAndEvaluateModuleCode, loadAndEvaluateModule, s_moduleLoaderPrototypeLoadAndEvaluateModuleCodeLength) \
    macro(moduleLoaderPrototypeLoadModuleCode, loadModule, s_moduleLoaderPrototypeLoadModuleCodeLength) \
    macro(moduleLoaderPrototypeLinkAndEvaluateModuleCode, linkAndEvaluateModule, s_moduleLoaderPrototypeLinkAndEvaluateModuleCodeLength) \
    macro(numberConstructorIsFiniteCode, isFinite, s_numberConstructorIsFiniteCodeLength) \
    macro(numberConstructorIsNaNCode, isNaN, s_numberConstructorIsNaNCodeLength) \
    macro(numberPrototypeToLocaleStringCode, toLocaleString, s_numberPrototypeToLocaleStringCodeLength) \
    macro(objectConstructorEnumerableOwnPropertiesCode, enumerableOwnProperties, s_objectConstructorEnumerableOwnPropertiesCodeLength) \
    macro(objectConstructorValuesCode, values, s_objectConstructorValuesCodeLength) \
    macro(objectConstructorEntriesCode, entries, s_objectConstructorEntriesCodeLength) \
    macro(objectConstructorAssignCode, assign, s_objectConstructorAssignCodeLength) \
    macro(promiseConstructorAllCode, all, s_promiseConstructorAllCodeLength) \
    macro(promiseConstructorRaceCode, race, s_promiseConstructorRaceCodeLength) \
    macro(promiseConstructorRejectCode, reject, s_promiseConstructorRejectCodeLength) \
    macro(promiseConstructorResolveCode, resolve, s_promiseConstructorResolveCodeLength) \
    macro(promiseOperationsIsPromiseCode, isPromise, s_promiseOperationsIsPromiseCodeLength) \
    macro(promiseOperationsNewPromiseReactionCode, newPromiseReaction, s_promiseOperationsNewPromiseReactionCodeLength) \
    macro(promiseOperationsNewPromiseCapabilityCode, newPromiseCapability, s_promiseOperationsNewPromiseCapabilityCodeLength) \
    macro(promiseOperationsTriggerPromiseReactionsCode, triggerPromiseReactions, s_promiseOperationsTriggerPromiseReactionsCodeLength) \
    macro(promiseOperationsRejectPromiseCode, rejectPromise, s_promiseOperationsRejectPromiseCodeLength) \
    macro(promiseOperationsFulfillPromiseCode, fulfillPromise, s_promiseOperationsFulfillPromiseCodeLength) \
    macro(promiseOperationsCreateResolvingFunctionsCode, createResolvingFunctions, s_promiseOperationsCreateResolvingFunctionsCodeLength) \
    macro(promiseOperationsPromiseReactionJobCode, promiseReactionJob, s_promiseOperationsPromiseReactionJobCodeLength) \
    macro(promiseOperationsPromiseResolveThenableJobCode, promiseResolveThenableJob, s_promiseOperationsPromiseResolveThenableJobCodeLength) \
    macro(promiseOperationsInitializePromiseCode, initializePromise, s_promiseOperationsInitializePromiseCodeLength) \
    macro(promisePrototypeCatchCode, catch, s_promisePrototypeCatchCodeLength) \
    macro(promisePrototypeThenCode, then, s_promisePrototypeThenCodeLength) \
    macro(reflectObjectApplyCode, apply, s_reflectObjectApplyCodeLength) \
    macro(reflectObjectDeletePropertyCode, deleteProperty, s_reflectObjectDeletePropertyCodeLength) \
    macro(reflectObjectHasCode, has, s_reflectObjectHasCodeLength) \
    macro(regExpPrototypeAdvanceStringIndexCode, advanceStringIndex, s_regExpPrototypeAdvanceStringIndexCodeLength) \
    macro(regExpPrototypeRegExpExecCode, regExpExec, s_regExpPrototypeRegExpExecCodeLength) \
    macro(regExpPrototypeHasObservableSideEffectsForRegExpMatchCode, hasObservableSideEffectsForRegExpMatch, s_regExpPrototypeHasObservableSideEffectsForRegExpMatchCodeLength) \
    macro(regExpPrototypeMatchCode, match, s_regExpPrototypeMatchCodeLength) \
    macro(regExpPrototypeReplaceCode, replace, s_regExpPrototypeReplaceCodeLength) \
    macro(regExpPrototypeSearchCode, search, s_regExpPrototypeSearchCodeLength) \
    macro(regExpPrototypeHasObservableSideEffectsForRegExpSplitCode, hasObservableSideEffectsForRegExpSplit, s_regExpPrototypeHasObservableSideEffectsForRegExpSplitCodeLength) \
    macro(regExpPrototypeSplitCode, split, s_regExpPrototypeSplitCodeLength) \
    macro(regExpPrototypeTestCode, test, s_regExpPrototypeTestCodeLength) \
    macro(setPrototypeForEachCode, forEach, s_setPrototypeForEachCodeLength) \
    macro(stringConstructorRawCode, raw, s_stringConstructorRawCodeLength) \
    macro(stringIteratorPrototypeNextCode, next, s_stringIteratorPrototypeNextCodeLength) \
    macro(stringPrototypeMatchCode, match, s_stringPrototypeMatchCodeLength) \
    macro(stringPrototypeRepeatSlowPathCode, repeatSlowPath, s_stringPrototypeRepeatSlowPathCodeLength) \
    macro(stringPrototypeRepeatCharactersSlowPathCode, repeatCharactersSlowPath, s_stringPrototypeRepeatCharactersSlowPathCodeLength) \
    macro(stringPrototypeRepeatCode, repeat, s_stringPrototypeRepeatCodeLength) \
    macro(stringPrototypePadStartCode, padStart, s_stringPrototypePadStartCodeLength) \
    macro(stringPrototypePadEndCode, padEnd, s_stringPrototypePadEndCodeLength) \
    macro(stringPrototypeHasObservableSideEffectsForStringReplaceCode, hasObservableSideEffectsForStringReplace, s_stringPrototypeHasObservableSideEffectsForStringReplaceCodeLength) \
    macro(stringPrototypeReplaceCode, replace, s_stringPrototypeReplaceCodeLength) \
    macro(stringPrototypeLocaleCompareCode, localeCompare, s_stringPrototypeLocaleCompareCodeLength) \
    macro(stringPrototypeSearchCode, search, s_stringPrototypeSearchCodeLength) \
    macro(stringPrototypeSplitCode, split, s_stringPrototypeSplitCodeLength) \
    macro(typedArrayConstructorOfCode, of, s_typedArrayConstructorOfCodeLength) \
    macro(typedArrayConstructorFromCode, from, s_typedArrayConstructorFromCodeLength) \
    macro(typedArrayConstructorAllocateInt8ArrayCode, allocateInt8Array, s_typedArrayConstructorAllocateInt8ArrayCodeLength) \
    macro(typedArrayConstructorAllocateInt16ArrayCode, allocateInt16Array, s_typedArrayConstructorAllocateInt16ArrayCodeLength) \
    macro(typedArrayConstructorAllocateInt32ArrayCode, allocateInt32Array, s_typedArrayConstructorAllocateInt32ArrayCodeLength) \
    macro(typedArrayConstructorAllocateUint32ArrayCode, allocateUint32Array, s_typedArrayConstructorAllocateUint32ArrayCodeLength) \
    macro(typedArrayConstructorAllocateUint16ArrayCode, allocateUint16Array, s_typedArrayConstructorAllocateUint16ArrayCodeLength) \
    macro(typedArrayConstructorAllocateUint8ArrayCode, allocateUint8Array, s_typedArrayConstructorAllocateUint8ArrayCodeLength) \
    macro(typedArrayConstructorAllocateUint8ClampedArrayCode, allocateUint8ClampedArray, s_typedArrayConstructorAllocateUint8ClampedArrayCodeLength) \
    macro(typedArrayConstructorAllocateFloat32ArrayCode, allocateFloat32Array, s_typedArrayConstructorAllocateFloat32ArrayCodeLength) \
    macro(typedArrayConstructorAllocateFloat64ArrayCode, allocateFloat64Array, s_typedArrayConstructorAllocateFloat64ArrayCodeLength) \
    macro(typedArrayPrototypeTypedArraySpeciesConstructorCode, typedArraySpeciesConstructor, s_typedArrayPrototypeTypedArraySpeciesConstructorCodeLength) \
    macro(typedArrayPrototypeTypedArrayClampArgumentToStartOrEndCode, typedArrayClampArgumentToStartOrEnd, s_typedArrayPrototypeTypedArrayClampArgumentToStartOrEndCodeLength) \
    macro(typedArrayPrototypeValuesCode, values, s_typedArrayPrototypeValuesCodeLength) \
    macro(typedArrayPrototypeKeysCode, keys, s_typedArrayPrototypeKeysCodeLength) \
    macro(typedArrayPrototypeEntriesCode, entries, s_typedArrayPrototypeEntriesCodeLength) \
    macro(typedArrayPrototypeEveryCode, every, s_typedArrayPrototypeEveryCodeLength) \
    macro(typedArrayPrototypeFillCode, fill, s_typedArrayPrototypeFillCodeLength) \
    macro(typedArrayPrototypeFindCode, find, s_typedArrayPrototypeFindCodeLength) \
    macro(typedArrayPrototypeFindIndexCode, findIndex, s_typedArrayPrototypeFindIndexCodeLength) \
    macro(typedArrayPrototypeForEachCode, forEach, s_typedArrayPrototypeForEachCodeLength) \
    macro(typedArrayPrototypeSomeCode, some, s_typedArrayPrototypeSomeCodeLength) \
    macro(typedArrayPrototypeSortCode, sort, s_typedArrayPrototypeSortCodeLength) \
    macro(typedArrayPrototypeSubarrayCode, subarray, s_typedArrayPrototypeSubarrayCodeLength) \
    macro(typedArrayPrototypeReduceCode, reduce, s_typedArrayPrototypeReduceCodeLength) \
    macro(typedArrayPrototypeReduceRightCode, reduceRight, s_typedArrayPrototypeReduceRightCodeLength) \
    macro(typedArrayPrototypeMapCode, map, s_typedArrayPrototypeMapCodeLength) \
    macro(typedArrayPrototypeFilterCode, filter, s_typedArrayPrototypeFilterCodeLength) \
    macro(typedArrayPrototypeToLocaleStringCode, toLocaleString, s_typedArrayPrototypeToLocaleStringCodeLength) \

#define JSC_FOREACH_BUILTIN_FUNCTION_NAME(macro) \
    macro(advanceStringIndex) \
    macro(all) \
    macro(allocateFloat32Array) \
    macro(allocateFloat64Array) \
    macro(allocateInt16Array) \
    macro(allocateInt32Array) \
    macro(allocateInt8Array) \
    macro(allocateUint16Array) \
    macro(allocateUint32Array) \
    macro(allocateUint8Array) \
    macro(allocateUint8ClampedArray) \
    macro(apply) \
    macro(arrayIteratorKeyNext) \
    macro(arrayIteratorKeyValueNext) \
    macro(arrayIteratorValueNext) \
    macro(assign) \
    macro(bind) \
    macro(call) \
    macro(catch) \
    macro(commitInstantiated) \
    macro(concat) \
    macro(concatSlowPath) \
    macro(copyWithin) \
    macro(createArrayIterator) \
    macro(createResolvingFunctions) \
    macro(deleteProperty) \
    macro(ensureRegistered) \
    macro(entries) \
    macro(enumerableOwnProperties) \
    macro(every) \
    macro(fill) \
    macro(filter) \
    macro(find) \
    macro(findIndex) \
    macro(forEach) \
    macro(forceFulfillPromise) \
    macro(from) \
    macro(fulfillFetch) \
    macro(fulfillInstantiate) \
    macro(fulfillPromise) \
    macro(fulfillTranslate) \
    macro(generatorResume) \
    macro(has) \
    macro(hasObservableSideEffectsForRegExpMatch) \
    macro(hasObservableSideEffectsForRegExpSplit) \
    macro(hasObservableSideEffectsForStringReplace) \
    macro(includes) \
    macro(initializePromise) \
    macro(instantiation) \
    macro(internalAll) \
    macro(isArray) \
    macro(isDictionary) \
    macro(isFinite) \
    macro(isNaN) \
    macro(isPromise) \
    macro(keys) \
    macro(link) \
    macro(linkAndEvaluateModule) \
    macro(loadAndEvaluateModule) \
    macro(loadModule) \
    macro(localeCompare) \
    macro(map) \
    macro(match) \
    macro(moduleEvaluation) \
    macro(newPromiseCapability) \
    macro(newPromiseReaction) \
    macro(newRegistryEntry) \
    macro(next) \
    macro(of) \
    macro(padEnd) \
    macro(padStart) \
    macro(promiseFulfilled) \
    macro(promiseReactionJob) \
    macro(promiseRejected) \
    macro(promiseResolveThenableJob) \
    macro(provide) \
    macro(race) \
    macro(raw) \
    macro(reduce) \
    macro(reduceRight) \
    macro(regExpExec) \
    macro(reject) \
    macro(rejectPromise) \
    macro(repeat) \
    macro(repeatCharactersSlowPath) \
    macro(repeatSlowPath) \
    macro(replace) \
    macro(requestFetch) \
    macro(requestInstantiate) \
    macro(requestInstantiateAll) \
    macro(requestLink) \
    macro(requestReady) \
    macro(requestSatisfy) \
    macro(requestTranslate) \
    macro(resolve) \
    macro(return) \
    macro(search) \
    macro(setStateToMax) \
    macro(some) \
    macro(sort) \
    macro(speciesConstructor) \
    macro(speciesGetter) \
    macro(split) \
    macro(subarray) \
    macro(symbolHasInstance) \
    macro(symbolIteratorGetter) \
    macro(test) \
    macro(then) \
    macro(throw) \
    macro(toInteger) \
    macro(toLength) \
    macro(toLocaleDateString) \
    macro(toLocaleString) \
    macro(toLocaleTimeString) \
    macro(triggerPromiseReactions) \
    macro(typedArrayClampArgumentToStartOrEnd) \
    macro(typedArraySpeciesConstructor) \
    macro(values) \

#define JSC_FOREACH_BUILTIN_FUNCTION_PRIVATE_GLOBAL_NAME(macro) \
    macro(advanceStringIndex, regExpPrototypeAdvanceStringIndex) \
    macro(arrayIteratorKeyNext, arrayIteratorPrototypeArrayIteratorKeyNext) \
    macro(arrayIteratorKeyValueNext, arrayIteratorPrototypeArrayIteratorKeyValueNext) \
    macro(arrayIteratorValueNext, arrayIteratorPrototypeArrayIteratorValueNext) \
    macro(createArrayIterator, arrayPrototypeCreateArrayIteratorConstructor) \
    macro(createResolvingFunctions, promiseOperationsCreateResolvingFunctions) \
    macro(enumerableOwnProperties, objectConstructorEnumerableOwnProperties) \
    macro(fulfillPromise, promiseOperationsFulfillPromise) \
    macro(generatorResume, generatorPrototypeGeneratorResume) \
    macro(hasObservableSideEffectsForRegExpMatch, regExpPrototypeHasObservableSideEffectsForRegExpMatch) \
    macro(hasObservableSideEffectsForRegExpSplit, regExpPrototypeHasObservableSideEffectsForRegExpSplit) \
    macro(hasObservableSideEffectsForStringReplace, stringPrototypeHasObservableSideEffectsForStringReplace) \
    macro(initializePromise, promiseOperationsInitializePromise) \
    macro(isDictionary, globalOperationsIsDictionary) \
    macro(isFinite, globalObjectIsFinite) \
    macro(isNaN, globalObjectIsNaN) \
    macro(isPromise, promiseOperationsIsPromise) \
    macro(newPromiseCapability, promiseOperationsNewPromiseCapability) \
    macro(newPromiseReaction, promiseOperationsNewPromiseReaction) \
    macro(promiseReactionJob, promiseOperationsPromiseReactionJob) \
    macro(promiseResolveThenableJob, promiseOperationsPromiseResolveThenableJob) \
    macro(regExpExec, regExpPrototypeRegExpExec) \
    macro(rejectPromise, promiseOperationsRejectPromise) \
    macro(repeatCharactersSlowPath, stringPrototypeRepeatCharactersSlowPath) \
    macro(repeatSlowPath, stringPrototypeRepeatSlowPath) \
    macro(speciesConstructor, globalOperationsSpeciesConstructor) \
    macro(speciesGetter, globalOperationsSpeciesGetter) \
    macro(toInteger, globalOperationsToInteger) \
    macro(toLength, globalOperationsToLength) \
    macro(triggerPromiseReactions, promiseOperationsTriggerPromiseReactions) \
    macro(typedArrayClampArgumentToStartOrEnd, typedArrayPrototypeTypedArrayClampArgumentToStartOrEnd) \
    macro(typedArraySpeciesConstructor, typedArrayPrototypeTypedArraySpeciesConstructor) \

#define DECLARE_BUILTIN_GENERATOR(codeName, functionName, argumentCount) \
    JSC::FunctionExecutable* codeName##Generator(JSC::VM&);

JSC_FOREACH_BUILTIN_CODE(DECLARE_BUILTIN_GENERATOR)
#undef DECLARE_BUILTIN_GENERATOR

} // namespace JSC
