tor-browser

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

jspubtd.h (3548B)


      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 #ifndef jspubtd_h
      8 #define jspubtd_h
      9 
     10 /*
     11 * JS public API typedefs.
     12 */
     13 
     14 #include "mozilla/Assertions.h"  // MOZ_ASSERT_UNREACHABLE
     15 
     16 #include "jstypes.h"
     17 
     18 #include "js/ProtoKey.h"
     19 #include "js/Result.h"
     20 #include "js/TraceKind.h"
     21 #include "js/TypeDecls.h"
     22 
     23 #if defined(JS_GC_ZEAL) || defined(DEBUG)
     24 #  define JSGC_HASH_TABLE_CHECKS
     25 #  define JS_CHECK_UNSAFE_CALL_WITH_ABI
     26 #endif
     27 
     28 namespace JS {
     29 
     30 class CallArgs;
     31 
     32 class JS_PUBLIC_API RealmOptions;
     33 
     34 }  // namespace JS
     35 
     36 /* Result of typeof operator enumeration. */
     37 enum JSType {
     38  JSTYPE_UNDEFINED, /* undefined */
     39  JSTYPE_OBJECT,    /* object */
     40  JSTYPE_FUNCTION,  /* function */
     41  JSTYPE_STRING,    /* string */
     42  JSTYPE_NUMBER,    /* number */
     43  JSTYPE_BOOLEAN,   /* boolean */
     44  JSTYPE_SYMBOL,    /* symbol */
     45  JSTYPE_BIGINT,    /* bigint */
     46  JSTYPE_LIMIT
     47 };
     48 
     49 inline const char* JSTypeToString(JSType type) {
     50  switch (type) {
     51    case JSTYPE_UNDEFINED:
     52      return "undefined";
     53    case JSTYPE_OBJECT:
     54      return "object";
     55    case JSTYPE_FUNCTION:
     56      return "function";
     57    case JSTYPE_STRING:
     58      return "string";
     59    case JSTYPE_NUMBER:
     60      return "number";
     61    case JSTYPE_BOOLEAN:
     62      return "boolean";
     63    case JSTYPE_SYMBOL:
     64      return "symbol";
     65    case JSTYPE_BIGINT:
     66      return "bigint";
     67    default:
     68      MOZ_ASSERT_UNREACHABLE("Unknown JSType");
     69  }
     70  return "";
     71 }
     72 
     73 /* Dense index into cached prototypes and class atoms for standard objects. */
     74 enum JSProtoKey {
     75 #define PROTOKEY_AND_INITIALIZER(name, clasp) JSProto_##name,
     76  JS_FOR_EACH_PROTOTYPE(PROTOKEY_AND_INITIALIZER)
     77 #undef PROTOKEY_AND_INITIALIZER
     78      JSProto_LIMIT
     79 };
     80 
     81 /* Struct forward declarations. */
     82 struct JSClass;
     83 class JSErrorReport;
     84 struct JSFunctionSpec;
     85 struct JSPrincipals;
     86 struct JSPropertySpec;
     87 struct JSSecurityCallbacks;
     88 struct JSStructuredCloneCallbacks;
     89 struct JSStructuredCloneReader;
     90 struct JSStructuredCloneWriter;
     91 class JS_PUBLIC_API JSTracer;
     92 
     93 class JSLinearString;
     94 
     95 template <typename T>
     96 struct JSConstScalarSpec;
     97 using JSConstDoubleSpec = JSConstScalarSpec<double>;
     98 using JSConstIntegerSpec = JSConstScalarSpec<int32_t>;
     99 
    100 namespace js {
    101 
    102 inline JS::Realm* GetContextRealm(const JSContext* cx);
    103 inline JS::Compartment* GetContextCompartment(const JSContext* cx);
    104 inline JS::Zone* GetContextZone(const JSContext* cx);
    105 
    106 // Whether the current thread is permitted access to any part of the specified
    107 // runtime or zone.
    108 JS_PUBLIC_API bool CurrentThreadCanAccessRuntime(const JSRuntime* rt);
    109 
    110 #ifdef DEBUG
    111 JS_PUBLIC_API bool CurrentThreadIsMainThread();
    112 JS_PUBLIC_API bool CurrentThreadIsPerformingGC();
    113 #endif
    114 
    115 }  // namespace js
    116 
    117 namespace JS {
    118 
    119 class JS_PUBLIC_API PropertyDescriptor;
    120 
    121 // Decorates the Unlinking phase of CycleCollection so that accidental use
    122 // of barriered accessors results in assertions instead of leaks.
    123 class MOZ_STACK_CLASS JS_PUBLIC_API AutoEnterCycleCollection {
    124 #ifdef DEBUG
    125  JSRuntime* runtime_;
    126 
    127 public:
    128  explicit AutoEnterCycleCollection(JSRuntime* rt);
    129  ~AutoEnterCycleCollection();
    130 #else
    131 public:
    132  explicit AutoEnterCycleCollection(JSRuntime* rt) {}
    133  ~AutoEnterCycleCollection() {}
    134 #endif
    135 };
    136 
    137 } /* namespace JS */
    138 
    139 extern "C" {
    140 
    141 // Defined in NSPR prio.h.
    142 using PRFileDesc = struct PRFileDesc;
    143 }
    144 
    145 #endif /* jspubtd_h */