/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * vim: set ts=8 sts=4 et sw=4 tw=99:
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* A higher-order macro for enumerating all JSProtoKey values. */

#ifndef jsprototypes_h
#define jsprototypes_h

#include "jsversion.h"

/*
 * Enumerator codes in the second column must not change -- they are part of
 * the JS XDR API.  Also note the symbols in the third column are extern "C";
 * clients should use extern "C" {} as appropriate when using this macro.
 */

#define JS_FOR_EACH_PROTOTYPE(macro) \
    macro(Null,                   0,     js_InitNullClass) \
    macro(Object,                 1,     js_InitObjectClass) \
    macro(Function,               2,     js_InitFunctionClass) \
    macro(Array,                  3,     js_InitArrayClass) \
    macro(Boolean,                4,     js_InitBooleanClass) \
    macro(JSON,                   5,     js_InitJSONClass) \
    macro(Date,                   6,     js_InitDateClass) \
    macro(Math,                   7,     js_InitMathClass) \
    macro(Number,                 8,     js_InitNumberClass) \
    macro(String,                 9,     js_InitStringClass) \
    macro(RegExp,                10,     js_InitRegExpClass) \
    macro(Error,                 11,     js_InitExceptionClasses) \
    macro(InternalError,         12,     js_InitExceptionClasses) \
    macro(EvalError,             13,     js_InitExceptionClasses) \
    macro(RangeError,            14,     js_InitExceptionClasses) \
    macro(ReferenceError,        15,     js_InitExceptionClasses) \
    macro(SyntaxError,           16,     js_InitExceptionClasses) \
    macro(TypeError,             17,     js_InitExceptionClasses) \
    macro(URIError,              18,     js_InitExceptionClasses) \
    macro(Iterator,              19,     js_InitIteratorClasses) \
    macro(StopIteration,         20,     js_InitIteratorClasses) \
    macro(ArrayBuffer,           21,     js_InitTypedArrayClasses) \
    macro(Int8Array,             22,     js_InitTypedArrayClasses) \
    macro(Uint8Array,            23,     js_InitTypedArrayClasses) \
    macro(Int16Array,            24,     js_InitTypedArrayClasses) \
    macro(Uint16Array,           25,     js_InitTypedArrayClasses) \
    macro(Int32Array,            26,     js_InitTypedArrayClasses) \
    macro(Uint32Array,           27,     js_InitTypedArrayClasses) \
    macro(Float32Array,          28,     js_InitTypedArrayClasses) \
    macro(Float64Array,          29,     js_InitTypedArrayClasses) \
    macro(Uint8ClampedArray,     30,     js_InitTypedArrayClasses) \
    macro(Proxy,                 31,     js_InitProxyClass) \
    macro(WeakMap,               32,     js_InitWeakMapClass) \
    macro(Map,                   33,     js_InitMapClass) \
    macro(Set,                   34,     js_InitSetClass) \
    macro(DataView,              35,     js_InitTypedArrayClasses) \
    macro(ParallelArray,         36,     js_InitParallelArrayClass) \
    macro(Intl,                  37,     js_InitIntlClass) \

#endif /* jsprototypes_h */
