tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TypeDecls.h (4915B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: set ts=8 sts=2 et sw=2 tw=80:
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 // This file contains public type declarations that are used *frequently*.  If
      8 // it doesn't occur at least 10 times in Gecko, it probably shouldn't be in
      9 // here.
     10 //
     11 // It includes only:
     12 // - forward declarations of structs and classes;
     13 // - typedefs;
     14 // - enums (maybe).
     15 // It does *not* contain any struct or class definitions.
     16 
     17 #ifndef js_TypeDecls_h
     18 #define js_TypeDecls_h
     19 
     20 #include <stdint.h>  // uint8_t
     21 
     22 #include "jstypes.h"  // JS_PUBLIC_API
     23 
     24 typedef uint8_t jsbytecode;
     25 
     26 class JS_PUBLIC_API JSAtom;
     27 struct JS_PUBLIC_API JSContext;
     28 struct JSClass;
     29 class JS_PUBLIC_API JSFunction;
     30 class JS_PUBLIC_API JSObject;
     31 struct JS_PUBLIC_API JSRuntime;
     32 class JS_PUBLIC_API JSScript;
     33 class JS_PUBLIC_API JSString;
     34 
     35 struct JSPrincipals;
     36 
     37 namespace js {
     38 class JS_PUBLIC_API TempAllocPolicy;
     39 };  // namespace js
     40 
     41 namespace JS {
     42 
     43 class JS_PUBLIC_API GCContext;
     44 class JS_PUBLIC_API PropertyKey;
     45 
     46 typedef unsigned char Latin1Char;
     47 
     48 class JS_PUBLIC_API Symbol;
     49 class JS_PUBLIC_API BigInt;
     50 class JS_PUBLIC_API Value;
     51 
     52 class JS_PUBLIC_API Compartment;
     53 class JS_PUBLIC_API Realm;
     54 struct JS_PUBLIC_API Runtime;
     55 class JS_PUBLIC_API Zone;
     56 
     57 template <typename T>
     58 class Handle;
     59 template <typename T>
     60 class MutableHandle;
     61 template <typename T>
     62 class Rooted;
     63 template <typename T>
     64 class PersistentRooted;
     65 template <typename T>
     66 class RootedVector;
     67 template <typename T>
     68 class PersistentRootedVector;
     69 template <typename T, typename AllocPolicy = js::TempAllocPolicy>
     70 class StackGCVector;
     71 
     72 typedef Handle<JSFunction*> HandleFunction;
     73 typedef Handle<PropertyKey> HandleId;
     74 typedef Handle<JSObject*> HandleObject;
     75 typedef Handle<JSScript*> HandleScript;
     76 typedef Handle<JSString*> HandleString;
     77 typedef Handle<JS::Symbol*> HandleSymbol;
     78 typedef Handle<JS::BigInt*> HandleBigInt;
     79 typedef Handle<Value> HandleValue;
     80 typedef Handle<StackGCVector<Value>> HandleValueVector;
     81 typedef Handle<StackGCVector<JSObject*>> HandleObjectVector;
     82 typedef Handle<StackGCVector<JS::PropertyKey>> HandleIdVector;
     83 
     84 typedef MutableHandle<JSFunction*> MutableHandleFunction;
     85 typedef MutableHandle<PropertyKey> MutableHandleId;
     86 typedef MutableHandle<JSObject*> MutableHandleObject;
     87 typedef MutableHandle<JSScript*> MutableHandleScript;
     88 typedef MutableHandle<JSString*> MutableHandleString;
     89 typedef MutableHandle<JS::Symbol*> MutableHandleSymbol;
     90 typedef MutableHandle<JS::BigInt*> MutableHandleBigInt;
     91 typedef MutableHandle<Value> MutableHandleValue;
     92 typedef MutableHandle<StackGCVector<Value>> MutableHandleValueVector;
     93 typedef MutableHandle<StackGCVector<JSObject*>> MutableHandleObjectVector;
     94 typedef MutableHandle<StackGCVector<JS::PropertyKey>> MutableHandleIdVector;
     95 
     96 typedef Rooted<JSObject*> RootedObject;
     97 typedef Rooted<JSFunction*> RootedFunction;
     98 typedef Rooted<JSScript*> RootedScript;
     99 typedef Rooted<JSString*> RootedString;
    100 typedef Rooted<JS::Symbol*> RootedSymbol;
    101 typedef Rooted<JS::BigInt*> RootedBigInt;
    102 typedef Rooted<PropertyKey> RootedId;
    103 typedef Rooted<JS::Value> RootedValue;
    104 
    105 typedef RootedVector<JS::Value> RootedValueVector;
    106 typedef RootedVector<JSObject*> RootedObjectVector;
    107 typedef RootedVector<JS::PropertyKey> RootedIdVector;
    108 
    109 typedef PersistentRooted<JSFunction*> PersistentRootedFunction;
    110 typedef PersistentRooted<PropertyKey> PersistentRootedId;
    111 typedef PersistentRooted<JSObject*> PersistentRootedObject;
    112 typedef PersistentRooted<JSScript*> PersistentRootedScript;
    113 typedef PersistentRooted<JSString*> PersistentRootedString;
    114 typedef PersistentRooted<JS::Symbol*> PersistentRootedSymbol;
    115 typedef PersistentRooted<JS::BigInt*> PersistentRootedBigInt;
    116 typedef PersistentRooted<Value> PersistentRootedValue;
    117 
    118 typedef PersistentRootedVector<PropertyKey> PersistentRootedIdVector;
    119 typedef PersistentRootedVector<JSObject*> PersistentRootedObjectVector;
    120 
    121 template <typename T>
    122 using HandleVector = Handle<StackGCVector<T>>;
    123 template <typename T>
    124 using MutableHandleVector = MutableHandle<StackGCVector<T>>;
    125 }  // namespace JS
    126 
    127 using jsid = JS::PropertyKey;
    128 
    129 #ifdef ENABLE_DECORATORS
    130 #  define IF_DECORATORS(x, ...) x
    131 #else
    132 #  define IF_DECORATORS(x, ...) __VA_ARGS__
    133 #endif
    134 
    135 #ifdef ENABLE_EXPLICIT_RESOURCE_MANAGEMENT
    136 #  define IF_EXPLICIT_RESOURCE_MANAGEMENT(x, ...) x
    137 #else
    138 #  define IF_EXPLICIT_RESOURCE_MANAGEMENT(x, ...) __VA_ARGS__
    139 #endif
    140 
    141 // Helper macros to combine build flags
    142 // TODO: need to find more generalised way to combine build flags
    143 #if defined(ENABLE_EXPLICIT_RESOURCE_MANAGEMENT) || defined(ENABLE_DECORATORS)
    144 #  define IF_EXPLICIT_RESOURCE_MANAGEMENT_OR_DECORATORS(x, ...) x
    145 #else
    146 #  define IF_EXPLICIT_RESOURCE_MANAGEMENT_OR_DECORATORS(x, ...) __VA_ARGS__
    147 #endif
    148 
    149 #endif /* js_TypeDecls_h */