5#ifndef V8_OBJECTS_CONTEXTS_INL_H_
6#define V8_OBJECTS_CONTEXTS_INL_H_
31#include "torque-generated/src/objects/contexts-tq-inl.inc"
34 return length_.Acquire_Load().value();
42 return names_to_context_index_.load();
46 names_to_context_index_.store(
this, value, mode);
66 return get(cage_base, index);
70 DCHECK_LT(
static_cast<unsigned int>(index),
77 DCHECK_LT(
static_cast<unsigned int>(index),
86 return get(cage_base, index, tag);
91 DCHECK_LT(
static_cast<unsigned int>(index),
98 DCHECK_LT(
static_cast<unsigned int>(index),
113 return get(PREVIOUS_INDEX);
118 DCHECK(IsBootstrappingOrValidParentContext(
result, *
this));
130 return scope_info()->HasContextExtensionSlot() && !IsUndefined(
extension());
134 DCHECK(scope_info()->HasContextExtensionSlot());
139 return this->
map()->native_context();
143 return map()->instance_type() == FUNCTION_CONTEXT_TYPE;
147 return map()->instance_type() == CATCH_CONTEXT_TYPE;
151 return map()->instance_type() == WITH_CONTEXT_TYPE;
155 return map()->instance_type() == DEBUG_EVALUATE_CONTEXT_TYPE;
159 return map()->instance_type() == AWAIT_CONTEXT_TYPE;
163 return map()->instance_type() == BLOCK_CONTEXT_TYPE;
167 return map()->instance_type() == MODULE_CONTEXT_TYPE;
171 return map()->instance_type() == EVAL_CONTEXT_TYPE;
175 return map()->instance_type() == SCRIPT_CONTEXT_TYPE;
180 that->native_context()->security_token();
185#define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name) \
186 void Context::set_##name(Tagged<UNPAREN(type)> value) { \
187 DCHECK(IsNativeContext(*this)); \
188 set(index, value, UPDATE_WRITE_BARRIER, kReleaseStore); \
190 bool Context::is_##name(Tagged<UNPAREN(type)> value) const { \
191 DCHECK(IsNativeContext(*this)); \
192 return Cast<UNPAREN(type)>(get(index)) == value; \
194 Tagged<UNPAREN(type)> Context::name() const { \
195 DCHECK(IsNativeContext(*this)); \
196 return Cast<UNPAREN(type)>(get(index)); \
198 Tagged<UNPAREN(type)> Context::name(AcquireLoadTag tag) const { \
199 DCHECK(IsNativeContext(*this)); \
200 return Cast<UNPAREN(type)>(get(index, tag)); \
203#undef NATIVE_CONTEXT_FIELD_ACCESSORS
205#define CHECK_FOLLOWS2(v1, v2) static_assert((v1 + 1) == (v2))
206#define CHECK_FOLLOWS4(v1, v2, v3, v4) \
207 CHECK_FOLLOWS2(v1, v2); \
208 CHECK_FOLLOWS2(v2, v3); \
209 CHECK_FOLLOWS2(v3, v4)
212 bool has_shared_name) {
217 return CLASS_FUNCTION_MAP_INDEX;
223 GENERATOR_FUNCTION_WITH_NAME_MAP_INDEX);
225 ASYNC_GENERATOR_FUNCTION_WITH_NAME_MAP_INDEX);
228 : GENERATOR_FUNCTION_MAP_INDEX;
232 ASYNC_FUNCTION_WITH_NAME_MAP_INDEX);
234 base = ASYNC_FUNCTION_MAP_INDEX;
238 METHOD_WITH_NAME_MAP_INDEX);
240 base = STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX;
244 SLOPPY_FUNCTION_WITH_NAME_MAP_INDEX);
246 STRICT_FUNCTION_WITH_NAME_MAP_INDEX);
249 : SLOPPY_FUNCTION_MAP_INDEX;
251 int offset =
static_cast<int>(!has_shared_name);
261 DCHECK(IsNativeContext(*
this));
265 DCHECK(!IsUndefined(initial_js_array_map));
270 kMicrotaskQueueOffset,
290 DCHECK_EQ(map->elements_kind(), element_kind);
291 DCHECK(InstanceTypeChecker::IsJSTypedArray(map));
303 DCHECK(InstanceTypeChecker::IsJSTypedArray(map));
bool IsModuleContext() const
bool IsDebugEvaluateContext() const
Tagged< Context > previous() const
bool has_extension() const
bool IsWithContext() const
V8_INLINE void set(int index, Tagged< Object > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
V8_EXPORT_PRIVATE Tagged< JSGlobalObject > global_object() const
bool IsBlockContext() const
static const int FIRST_FIXED_TYPED_ARRAY_FUN_INDEX
static V8_INLINE constexpr int OffsetOfElementAt(int index)
bool IsScriptContext() const
static const int FIRST_RAB_GSAB_TYPED_ARRAY_MAP_INDEX
bool IsEvalContext() const
bool IsCatchContext() const
void set_previous(Tagged< Context > context, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
bool IsFunctionContext() const
Tagged< Map > GetInitialJSArrayMap(ElementsKind kind) const
Tagged< HeapObject > extension() const
bool IsAwaitContext() const
static int ArrayMapIndex(ElementsKind elements_kind)
Tagged< Object > next_context_link() const
V8_INLINE Tagged< Object > get(int index) const
bool HasSameSecurityTokenAs(Tagged< Context > that) const
static int FunctionMapIndex(LanguageMode language_mode, FunctionKind kind, bool has_shared_name)
Tagged< NativeContext > native_context() const
Tagged< ScriptContextTable > synchronized_script_context_table() const
Tagged< Map > TypedArrayElementsKindToCtorMap(ElementsKind element_kind) const
Tagged< Map > TypedArrayElementsKindToRabGsabCtorMap(ElementsKind element_kind) const
void set(int index, Tagged< Object > value, WriteBarrierMode mode)=delete
void synchronized_set_script_context_table(Tagged< ScriptContextTable > script_context_table)
int length(AcquireLoadTag) const
Tagged< NameToIndexHashTable > names_to_context_index() const
void set_length(int value, ReleaseStoreTag)
Tagged< Context > get(int index) const
void set_names_to_context_index(Tagged< NameToIndexHashTable > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
static constexpr Tagged< Smi > FromInt(int value)
Tagged< ElementT > get(int index) const
static PtrType Relaxed_Load(Tagged< HeapObject > host, int offset=0)
#define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name)
#define CHECK_FOLLOWS2(v1, v2)
#define NATIVE_CONTEXT_FIELDS(V)
MicrotaskQueue * microtask_queue
ZoneVector< RpoNumber > & result
bool IsClassConstructor(FunctionKind kind)
bool IsGeneratorFunction(FunctionKind kind)
ElementsKind GetCorrespondingRabGsabElementsKind(ElementsKind typed_array_kind)
bool IsAsyncFunction(FunctionKind kind)
bool IsModuleWithTopLevelAwait(FunctionKind kind)
@ FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND
Handle< To > UncheckedCast(Handle< From > value)
V8_INLINE PtrComprCageBase GetPtrComprCageBase()
bool IsFastElementsKind(ElementsKind kind)
bool is_strict(LanguageMode language_mode)
bool IsStrictFunctionWithoutPrototype(FunctionKind kind)
@ kNativeContextMicrotaskQueueTag
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
static constexpr ReleaseStoreTag kReleaseStore
static constexpr RelaxedLoadTag kRelaxedLoad
static constexpr AcquireLoadTag kAcquireLoad
#define EXTERNAL_POINTER_ACCESSORS(holder, name, type, offset, tag)
#define OBJECT_CONSTRUCTORS_IMPL(Type, Super)
#define ACCESSORS(holder, name, type, offset)
#define TQ_OBJECT_CONSTRUCTORS_IMPL(Type)
#define CONDITIONAL_WRITE_BARRIER(object, offset, value, mode)
#define RELAXED_WRITE_FIELD(p, offset, value)
#define RELAXED_SMI_ACCESSORS(holder, name, offset)
#define NEVER_READ_ONLY_SPACE_IMPL(Type)
#define ACQUIRE_READ_FIELD(p, offset)
#define RELEASE_WRITE_FIELD(p, offset, value)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)