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