5#ifndef V8_COMMON_ASSERT_SCOPE_H_
6#define V8_COMMON_ASSERT_SCOPE_H_
78#define PER_ISOLATE_DCHECK_TYPE(V, enable) \
81 V(AllowJavascriptExecution, DisallowJavascriptExecution, \
82 javascript_execution_assert, enable) \
85 V(AllowDeoptimization, DisallowDeoptimization, deoptimization_assert, \
89 V(AllowCompilation, DisallowCompilation, compilation_assert, enable) \
92 V(AllowExceptions, DisallowExceptions, no_exception_assert, enable)
94#define PER_ISOLATE_CHECK_TYPE(V, enable) \
97 V(NoThrowOnJavascriptExecution, ThrowOnJavascriptExecution, \
98 javascript_execution_throws, enable) \
101 V(NoDumpOnJavascriptExecution, DumpOnJavascriptExecution, \
102 javascript_execution_dump, enable)
104#define PER_ISOLATE_ASSERT_SCOPE_DECLARATION(ScopeType) \
105 class V8_NODISCARD ScopeType { \
107 V8_EXPORT_PRIVATE explicit ScopeType(Isolate* isolate); \
108 ScopeType(const ScopeType&) = delete; \
109 ScopeType& operator=(const ScopeType&) = delete; \
110 V8_EXPORT_PRIVATE ~ScopeType(); \
112 static bool IsAllowed(Isolate* isolate); \
114 V8_EXPORT_PRIVATE static void Open(Isolate* isolate, \
115 bool* was_execution_allowed); \
116 V8_EXPORT_PRIVATE static void Close(Isolate* isolate, \
117 bool was_execution_allowed); \
124#define PER_ISOLATE_ASSERT_ENABLE_SCOPE(EnableType, _1, _2, _3) \
125 PER_ISOLATE_ASSERT_SCOPE_DECLARATION(EnableType)
127#define PER_ISOLATE_ASSERT_DISABLE_SCOPE(_1, DisableType, _2, _3) \
128 PER_ISOLATE_ASSERT_SCOPE_DECLARATION(DisableType)
136#define PER_ISOLATE_DCHECK_ENABLE_SCOPE(EnableType, DisableType, field, _) \
137 class EnableType##DebugOnly : public EnableType { \
139 explicit EnableType##DebugOnly(Isolate* isolate) : EnableType(isolate) {} \
142#define PER_ISOLATE_DCHECK_ENABLE_SCOPE(EnableType, DisableType, field, _) \
143 class V8_NODISCARD EnableType##DebugOnly { \
145 explicit EnableType##DebugOnly(Isolate* isolate) {} \
150#define PER_ISOLATE_DCHECK_DISABLE_SCOPE(EnableType, DisableType, field, _) \
151 class DisableType##DebugOnly : public DisableType { \
153 explicit DisableType##DebugOnly(Isolate* isolate) \
154 : DisableType(isolate) {} \
157#define PER_ISOLATE_DCHECK_DISABLE_SCOPE(EnableType, DisableType, field, _) \
158 class V8_NODISCARD DisableType##DebugOnly { \
160 explicit DisableType##DebugOnly(Isolate* isolate) {} \
260#define DISALLOW_GARBAGE_COLLECTION(name) DisallowGarbageCollection name;
262#define DISALLOW_GARBAGE_COLLECTION(name)
313 std::optional<DisallowGarbageCollection>
no_gc_;
#define PER_ISOLATE_ASSERT_DISABLE_SCOPE(_1, DisableType, _2, _3)
#define PER_ISOLATE_DCHECK_TYPE(V, enable)
#define PER_ISOLATE_ASSERT_ENABLE_SCOPE(EnableType, _1, _2, _3)
#define PER_ISOLATE_DCHECK_ENABLE_SCOPE(EnableType, DisableType, field, _)
#define PER_ISOLATE_DCHECK_DISABLE_SCOPE(EnableType, DisableType, field, _)
#define PER_ISOLATE_CHECK_TYPE(V, enable)
DisallowHeapAccessIf(bool condition)
std::optional< DisallowHeapAccess > maybe_disallow_
NoGarbageCollectionMutexGuard(base::Mutex *mutex)
std::optional< DisallowGarbageCollection > no_gc_
PerThreadAssertScopeEmpty()
PerThreadAssertScope & operator=(const PerThreadAssertScope &)=delete
PerThreadAssertScope(const PerThreadAssertScope &)=delete
PerThreadAsserts old_data_
DisallowGarbageCollection no_gc_
PerThreadAssertScopeEmpty< kAllow, kTypes... > PerThreadAssertScopeDebugOnly
@ CODE_DEPENDENCY_CHANGE_ASSERT
@ HANDLE_USAGE_ON_ALL_THREADS_ASSERT
@ POSITION_INFO_SLOW_ASSERT
@ ASSERT_TYPE_IS_VALID_MARKER
@ HANDLE_ALLOCATION_ASSERT
@ HANDLE_DEREFERENCE_ASSERT
#define V8_EXPORT_PRIVATE