/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: set ts=8 sts=2 et sw=2 tw=80: * 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/. */ // This file contains public type declarations that are used *frequently*. If // it doesn't occur at least 10 times in Gecko, it probably shouldn't be in // here. // // It includes only: // - forward declarations of structs and classes; // - typedefs; // - enums (maybe). // It does *not* contain any struct or class definitions. #ifndef js_TypeDecls_h #define js_TypeDecls_h #include // uint8_t #include "jstypes.h" // JS_PUBLIC_API typedef uint8_t jsbytecode; class JS_PUBLIC_API JSAtom; struct JS_PUBLIC_API JSContext; struct JSClass; class JS_PUBLIC_API JSFunction; class JS_PUBLIC_API JSObject; struct JS_PUBLIC_API JSRuntime; class JS_PUBLIC_API JSScript; class JS_PUBLIC_API JSString; struct JSPrincipals; namespace js { class JS_PUBLIC_API TempAllocPolicy; }; // namespace js namespace JS { class JS_PUBLIC_API GCContext; class JS_PUBLIC_API PropertyKey; typedef unsigned char Latin1Char; class JS_PUBLIC_API Symbol; class JS_PUBLIC_API BigInt; #ifdef ENABLE_RECORD_TUPLE class JS_PUBLIC_API RecordType; class JS_PUBLIC_API TupleType; #endif class JS_PUBLIC_API Value; class JS_PUBLIC_API Compartment; class JS_PUBLIC_API Realm; struct JS_PUBLIC_API Runtime; class JS_PUBLIC_API Zone; template class Handle; template class MutableHandle; template class Rooted; template class PersistentRooted; template class RootedVector; template class PersistentRootedVector; template class StackGCVector; typedef Handle HandleFunction; typedef Handle HandleId; typedef Handle HandleObject; typedef Handle HandleScript; typedef Handle HandleString; typedef Handle HandleSymbol; typedef Handle HandleBigInt; typedef Handle HandleValue; typedef Handle> HandleValueVector; typedef Handle> HandleObjectVector; typedef Handle> HandleIdVector; typedef MutableHandle MutableHandleFunction; typedef MutableHandle MutableHandleId; typedef MutableHandle MutableHandleObject; typedef MutableHandle MutableHandleScript; typedef MutableHandle MutableHandleString; typedef MutableHandle MutableHandleSymbol; typedef MutableHandle MutableHandleBigInt; typedef MutableHandle MutableHandleValue; typedef MutableHandle> MutableHandleValueVector; typedef MutableHandle> MutableHandleObjectVector; typedef MutableHandle> MutableHandleIdVector; typedef Rooted RootedObject; typedef Rooted RootedFunction; typedef Rooted RootedScript; typedef Rooted RootedString; typedef Rooted RootedSymbol; typedef Rooted RootedBigInt; typedef Rooted RootedId; typedef Rooted RootedValue; typedef RootedVector RootedValueVector; typedef RootedVector RootedObjectVector; typedef RootedVector RootedIdVector; typedef PersistentRooted PersistentRootedFunction; typedef PersistentRooted PersistentRootedId; typedef PersistentRooted PersistentRootedObject; typedef PersistentRooted PersistentRootedScript; typedef PersistentRooted PersistentRootedString; typedef PersistentRooted PersistentRootedSymbol; typedef PersistentRooted PersistentRootedBigInt; typedef PersistentRooted PersistentRootedValue; typedef PersistentRootedVector PersistentRootedIdVector; typedef PersistentRootedVector PersistentRootedObjectVector; template using HandleVector = Handle>; template using MutableHandleVector = MutableHandle>; } // namespace JS using jsid = JS::PropertyKey; #ifdef ENABLE_RECORD_TUPLE // This takes 1 or 2 parameters. ... is just used so that // it's possible to omit the comma when passing a single // param: // IF_RECORD_TUPLE(doThis) // IF_RECORD_TUPLE(doThis, elseThis) # define IF_RECORD_TUPLE(x, ...) x #else # define IF_RECORD_TUPLE(x, ...) __VA_ARGS__ #endif // Follows the same pattern as IF_RECORD_TUPLE #ifdef ENABLE_DECORATORS # define IF_DECORATORS(x, ...) x #else # define IF_DECORATORS(x, ...) __VA_ARGS__ #endif #ifdef ENABLE_EXPLICIT_RESOURCE_MANAGEMENT # define IF_EXPLICIT_RESOURCE_MANAGEMENT(x, ...) x #else # define IF_EXPLICIT_RESOURCE_MANAGEMENT(x, ...) __VA_ARGS__ #endif // Helper macros to combine build flags // TODO: need to find more generalised way to combine build flags #if defined(ENABLE_EXPLICIT_RESOURCE_MANAGEMENT) || defined(ENABLE_DECORATORS) # define IF_EXPLICIT_RESOURCE_MANAGEMENT_OR_DECORATORS(x, ...) x #else # define IF_EXPLICIT_RESOURCE_MANAGEMENT_OR_DECORATORS(x, ...) __VA_ARGS__ #endif #endif /* js_TypeDecls_h */